У меня есть алгоритм для подсчета каждой перестановки массива int
. В этом случае - когда я хочу напечатать эти перестановки - все сработало нормально. Но если я хочу сохранить массивы в arraylist
, он сохранил их правильное количество, но сохранил только одну и ту же опцию. Я знаю, что проблема будет тривиальной, но я не могу ее решить. Спасибо за вашу помощь.Перестановка массива int [] в список
Я добавляю к методу printArray
, что впоследствии сохранил напечатанный массив до Arraylist
. Выход printArray
правильно, но выход printList
как это:
1 2 3 4 5 6
(and this input is printed n!, which is correct but its only one permutation
)
Вот мой код:
общественного класса переставляют {
ArrayList<int[]> list;
public Permute() {
list=new ArrayList<>();
}
void printArray(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println("");
list.add(a);
}
void printList(){
for(int[] arr:list){
for(int item:arr){
System.out.print(item+" ");
}
System.out.println("");
}
}
void permute(int[] a, int k) {
if (k == a.length)
printArray(a);
else {
for (int i = k; i < a.length; i++) {
int temp = a[k];
a[k] = a[i];
a[i] = temp;
permute(a, k + 1);
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
public static void main(String[] args) {
Permute p = new Permute();
int a[] = {1, 2, 3, 4, 5, 6};
p.permute(a, 0);
p.printList();
}
}
Вы всегда добавлять один и тот же массив ('a') в список. Позднее изменения в этом массиве затем отражаются во всех ссылках. Добавьте копию 'a' в список каждый раз:' list.add (Arrays.copyOf (a, a.length)) ' – schwobaseggl
@schwobaseggl, поэтому, когда я изменяю массив a, он также меняет массив в arraylist? Как добавить только копию? – prone666
См. Мой обновленный комментарий: в принципе, вам нужно создать новый массив для каждой перестановки (что делает метод Arrays.copyOf). Обычно я сначала делал копию, а затем делал изменения, чтобы оставить ваш начальный массив невредимым. – schwobaseggl