我有一个算法来计算每个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