我有一個算法來計算每個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'的副本:'list.add(Arrays.copyOf(a,a.length))' – schwobaseggl
@schwobaseggl所以當我改變數組a時,它也改變了ArrayList中的數組?我怎樣才能添加副本? – prone666
查看我的更新評論:基本上,您必須爲每個排列(Arrays.copyOf方法所做的)創建一個新數組。一般來說,我會先複製副本,然後進行更改以保持初始數組不受損害。 – schwobaseggl