2 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
問題是這一行
result.add(chosen);
基本上,您添加chosen
然后result
在下一次迭代中繼續(xù)編輯它。你想要做的是像這樣創(chuàng)建一個(gè)新列表
result.add(new ArrayList<>(chosen));
編輯:當(dāng)您這樣做時(shí),result.add(chosen);
您可能會(huì)認(rèn)為您將數(shù)組列表存儲(chǔ)chosen
在result
. chosen
但實(shí)際上,您存儲(chǔ)了對(duì)包含其值的數(shù)組列表的引用。添加一個(gè)粗略的圖表使事情更清楚
您可能認(rèn)為它chosen
本身存儲(chǔ)了整個(gè) ArrayList,但實(shí)際上,它只是存儲(chǔ)對(duì)存儲(chǔ)在 java 堆中的 arraylist 的引用。當(dāng)您進(jìn)行更改時(shí),chosen
更改將反映在存儲(chǔ)對(duì)此數(shù)組列表的引用的每個(gè)位置,在您的情況下,它位于result
.

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
問題是,當(dāng)您調(diào)用 return.add(chosen) 時(shí),您將選擇的列表傳遞給外部列表,而不是內(nèi)部列表。
result.get(indexOfOuterList).add(chosen)
上面的代碼應(yīng)該可以工作。
這是我第一次回復(fù),抱歉,我已經(jīng)盡力了。讓我知道我是對(duì)還是錯(cuò)
添加回答
舉報(bào)