我编写了一个函数来插入两个数组之间的步骤,但是在插值完成之前,所需的步数是未知的。
这是我的功能:
int[][] interpolate(int[] source, int[] goal){
int[] current = new int[source.length];
ArrayList<int[]> steps = new ArrayList<int[]>();
while(/* condition */){
// Change value of current
steps.add(current);
}
int[][] stepsArr = steps.toArray(new int[0][0]);
return stepsArr;
}
我尝试使用ArrayList来存储状态,但是我确定ArrayList只存储指针,因此最终的ArrayList包含多个指向同一对象的指针(当前的最终值)。
有没有办法动态生成int []实例以分步存储,否则生成一个2D整数数组?
答案 0 :(得分:1)
您的问题与您对原始类型的使用无关,而是与数组的处理有关。通过添加current
数组的副本修复代码,它将正常运行:
steps.add(Arrays.copyOf(current));
答案 1 :(得分:0)
您始终存储current
的相同实例。您可以为每次迭代创建一个新实例。
int[][] interpolate(int[] source, int[] goal){
int[] current;
ArrayList<int[]> steps = new ArrayList<int[]>();
while(/* condition */){
current = new int[source.length];
// Change value of current
steps.add(current);
}
int[][] stepsArr = steps.toArray(new int[0][0]);
return stepsArr;
}