我想寫一個Java中的程序,將計算一個整數數組(包含5個元素)中的元素的所有組合,並將這些組合輸出到一個ArrayList。我已經在下面包含了我的代碼。Java:麻煩添加項目ArrayList <ArrayList <Integer>>
我使用按位運算來查找組合。每個組合都被構造爲一個ArrayList(Integer),稱爲「writeitem」。然後我想將這些存儲在另一個ArrayList中,稱爲「master」,它必須具有ArrayList(ArrayList(Integer))的形式。 [格式化原因<>必須用()替換;他們不顯示,否則...]
嘗試將每個組合保存到「主」ArrayList時出現問題。如果您運行下面的代碼,printf函數將顯示組合構建正確。但是,一旦我要求它被「添加」到「主」,它似乎不會被追加到「主」的末尾。相反,所有「主人」都被剛剛構建的組合的副本覆蓋。因此,例如,如果我在[1,2,3,4,5]上調用函數,那麼我的「主」數組最終會成爲[副本1,2,3,4,5]的31個副本(其中,第31組合被發現)。
我想這與使用嵌套數組列表有關,還有更好的方法來實現我想要的。但是我也犯了一些其他的新手錯誤。清楚了()method.from爲loop.after每次迭代明確()從ArrayList中移除 值
static ArrayList<ArrayList<Integer>> master = new ArrayList<ArrayList<Integer>>();
public static void generatecombs(int[] x){
ArrayList<Integer> writeitem = new ArrayList<Integer>(); //empty list to construct each comb
for(int i=1;i<32;i++){
writeitem.clear(); //clear before constructing next combination
if((i & 1)>0){ //check if each element is present in combination
writeitem.add(x[0]);
}
if((i & 2)>0){
writeitem.add(x[1]);
}
if((i & 4)>0){
writeitem.add(x[2]);
}
if((i & 8)>0){
writeitem.add(x[3]);
}
if((i & 16)>0){
writeitem.add(x[4]);
}
System.out.printf("The %dth combination is %s\n", i,writeitem);
master.add(writeitem); //output constructed element
System.out.printf("The collection so far is: %s\n", master);
}
}
謝謝!並感謝大家的答案,現在它可以工作,並且我明白我做錯了什麼。 – lexipenia