我有一个二维数组和堆栈:
int[][] data = new int[][];
Stack<int[][]> undoList = new Stack<int[][]>(10);
我想在每次更改后添加数据,以便将其保留在撤消列表中:
undoList.push(data);
// some changes to data array
undoList.push(data);
// some changes to data array
undoList.push(data);
那么为什么所有堆栈元素都具有相同的值?
答案 0 :(得分:2)
您正在对阵列进行更改 - 但您并未将阵列本身置于堆栈中......您正在将引用放入阵列中堆栈。你基本上几次推动相同的参考。如果你想要独立的值,你需要独立的数组。
将参考视为有点像写在纸上的街道地址(纸张通常是变量)。你现在所拥有的是一本书,每页都有相同的街道地址。你可能已经在每页的书写之间画了房子的前门,但这并不意味着我们可以看到所有那些不同的颜色 - 只有一个房子参与其中。如果你想拥有许多不同房屋的街道地址和许多不同颜色的前门,你需要建造许多不同的房屋......
答案 1 :(得分:0)
我用@ Marco13在上面评论中提到的代码复制它来解决它:
深层复制
public static int[][] deepCopyArray(int[][] oldArray){
int[][] newArray = new int[oldArray.length][];
for(int i=0; i<oldArray.length; i++)
{
newArray[i] = new int[oldArray[i].length];
for(int j=0; j<oldArray[i].length; j++)
newArray[i][j] = oldArray[i][j];
}
return newArray;
}