Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二维阵列不是深度克隆,更改会影响两个阵列_Java_Arrays_Clone_Maze - Fatal编程技术网

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)