Я пытаюсь написать программу на Java, которая будет вычислять все комбинации элементов в массиве с целым числом (с 5 элементами) и выводить эти комбинации в ArrayList. Я включил свой код ниже.Java: проблема с добавлением элементов в ArrayList <ArrayList <Integer>>
Я использую побитовые операции для нахождения комбинаций. Каждая комбинация построена как ArrayList (Integer), называемая «writeitem». Затем я хочу сохранить их в другом ArrayList, называемом «master», который должен иметь форму ArrayList (ArrayList (Integer)). [по причинам форматирования <> должны быть заменены на(); они не отображаются иначе ...]
Проблема возникает при попытке сохранить каждую комбинацию в «Master» ArrayList. Если вы запустите код ниже, функция printf покажет, что комбинация построена правильно. Однако, как только я попрошу его «добавить» в «master», он, похоже, не добавляется к концу «master». Скорее всего, «хозяин» перезаписывается i копиями только что построенной комбинации.
Так, например, если я вызываю функцию на [1,2,3,4,5], мой «основной» массив заканчивается 31 копией [1,2,3,4,5] (31-ю комбинацию можно найти).
Я предполагаю, что это связано с использованием списков вложенных массивов, и есть лучший способ достичь того, что я хочу. Но это также возможно, что я совершаю ошибку другого новичка.
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