2014-08-28 32 views
0

我已经编写了一个函数来插入两个数组之间的步骤,但是直到插值完成才需要知道所需的步数。在ArrayList中动态生成和存储基元

这里是我的功能:

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 []实例来存储在步骤,否则生成一个整数的二维数组?

回答

1

您的问题与您对原始类型的使用无关,但与您对数组的处理无关。通过添加current阵列的副本修复你的代码,它会正常工作:

steps.add(Arrays.copyOf(current)); 
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; 
} 
+0

这打破了代码:OP迭代地将插值应用于相同的数组。你需要一个前一个数组的副本。 – 2014-08-28 11:02:18