Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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_Multidimensional Array - Fatal编程技术网

Java 为什么将一个数组复制到另一个数组会更改原始数组?

Java 为什么将一个数组复制到另一个数组会更改原始数组?,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,当我将二维数组复制到其他临时数组中时,它会在我对临时数组执行操作时更改原始数组 下面是我的代码的一部分来说明我的意思: 在写有pBoard[0][0]=空白的行上;和类似的,它改变董事会以及pBoard和我需要董事会保持不变,我的程序才能正常工作 我找到了一个与此类似的答案,这就是我想到使用System.arraycopy而不是pBoard=board的原因。System.arraycopy在我使用的另一个程序中工作,但在这个程序中不工作。 非常感谢您的帮助 还有一件事: 这是家庭作业的一部分。

当我将二维数组复制到其他临时数组中时,它会在我对临时数组执行操作时更改原始数组

下面是我的代码的一部分来说明我的意思:

在写有pBoard[0][0]=空白的行上;和类似的,它改变董事会以及pBoard和我需要董事会保持不变,我的程序才能正常工作

我找到了一个与此类似的答案,这就是我想到使用System.arraycopy而不是pBoard=board的原因。System.arraycopy在我使用的另一个程序中工作,但在这个程序中不工作。 非常感谢您的帮助

还有一件事:
这是家庭作业的一部分。然而,解决这个小问题甚至不会让我接近我需要的最终产品。到目前为止,这只是我代码中的一小部分,但我需要克服这一点才能继续。

intboard[]]是对int[]类型数组的引用数组。System.arraycopyboard,0,pBoard,0,board.length复制引用数组,但不复制引用数组,现在可以通过两种方式访问引用数组。要进行深度复制,还必须复制引用的一维数组。注意,要制作阵列的副本,可以使用array.clone。还考虑使用具有访问数组[x+n*y]的一维n*n数组。

int [][]]是INT[]类型数组的引用数组。System.arraycopyboard,0,pBoard,0,board.length复制引用数组,但不复制引用数组,现在可以通过两种方式访问引用数组。要进行深度复制,还必须复制引用的一维数组。注意,要制作阵列的副本,可以使用array.clone。还可以考虑使用一维数组的大小为n*n的访问数组[x+n*y]。

< p>您需要做一个深拷贝。

而不是:

pBoard = new int[board.length][board.length];
System.arraycopy(board, 0, pBoard, 0, board.length);
尝试:


你需要做一个深度复制

而不是:

pBoard = new int[board.length][board.length];
System.arraycopy(board, 0, pBoard, 0, board.length);
尝试:


看起来您正在复制引用而不是对象。这是肤浅的复制。它是原语,不被引用复制。我非常怀疑这段代码是否以任何方式修改了电路板,也许是在代码的其他地方?我使用了netbeans调试器,它在通过pBoard[0][0]=BLANK时同时更改了pBoard和board;线BLANK=-1。看起来您是在复制引用而不是对象。这是肤浅的复制。它是原语,不被引用复制。我非常怀疑这段代码是否以任何方式修改了电路板,也许是在代码的其他地方?我使用了netbeans调试器,它在通过pBoard[0][0]=BLANK时同时更改了pBoard和board;线BLANK=-1。谢谢你的回答!我会试一试的。谢谢你的回答!我要试一试。非常感谢你!我做了类似的事情,效果非常好。非常感谢!我做了类似的事情,效果非常好。
pBoard = new int[board.length][];
for ( int i = 0; i < pBoard.length; i++ ) {
  pBoard[i] = new int[board[i].length];
  System.arraycopy(board[i], 0, pBoard[i], 0, board[i].length);
}