Java 二维阵列不是深度克隆,更改会影响两个阵列
我需要克隆单元格对象的二维数组,但它不能正常工作。每当我克隆迷宫时,它都会克隆它,但当我对其中一个迷宫进行更改时,它在另一个迷宫上也可见 有人知道问题出在哪里Java 二维阵列不是深度克隆,更改会影响两个阵列,java,arrays,clone,maze,Java,Arrays,Clone,Maze,我需要克隆单元格对象的二维数组,但它不能正常工作。每当我克隆迷宫时,它都会克隆它,但当我对其中一个迷宫进行更改时,它在另一个迷宫上也可见 有人知道问题出在哪里 public void cloneMaze(boolean backup) { if (backup) { backupMaze = (Cell[][]) maze.clone(); for (int i = 0; i < maze.length; i++) { bac
public void cloneMaze(boolean backup)
{
if (backup) {
backupMaze = (Cell[][]) maze.clone();
for (int i = 0; i < maze.length; i++) {
backupMaze[i] = (Cell[]) maze[i].clone();
}
} else {
maze = (Cell[][]) backupMaze.clone();
for (int i = 0; i < backupMaze.length; i++) {
maze[i] = (Cell[]) backupMaze[i].clone();
}
}
}
public void cloneMaze(布尔备份)
{
如果(备份){
backupMaze=(Cell[])maze.clone();
对于(int i=0;i
在备份迷宫中,您需要创建一个新的单元格,它是第一个单元格的副本
否则,两个迷宫都指向相同的对象,因此对单元格的修改将反映在两个迷宫中
clone()
只是数组的浅拷贝,而您似乎在寻找深拷贝。请说明“进行更改”的含义。我猜你的意思是“maze[I][j].setFoo(…)”,它不是对数组的更改,而是对数组引用的对象的更改。你的副本仍然不是很深——为此,你还需要克隆每个单元?数组中的对象是动态的吗?迷宫中对象的可能副本在游戏开始时生成,并根据移动等进行更改。但是如何将它们复制到新的单元格中?您可以在单元格中创建构造函数副本,如单元格(单元格)
,添加克隆()
方法,或者简单地创建一个新单元格()
并正确设置其所有属性。不适用于新的单元格方法。我根据其他单元格属性设置属性,但不进行差异。您需要用对新单元格的引用替换旧单元格引用。例如myCell=newcell(myCell)代码>