在下面的代码中,我试图复制2d数组' cur,'在数组中交换两个值,并最终将它添加到一个arraylist我将在稍后的程序中使用。我的问题是,每次我在数组中切换这些值时都会出现这样的情况。 (具有克隆值' cur')它还会切换数组中的值' cur。'我很困惑,因为我尝试过clone(),Arrays.copyof,甚至为PuzzleNode类创建了一个新的构造函数,它从cur中获取值,但每次都是' cur。当循环的迭代结束时,它不会重置为其原始值。非常感谢任何帮助。
以下是代码:
//generate the puzzles and swap the tiles
for (int i = 0; i < possibleSwaps.size(); i++) {
//stores the 2d array of Nodes
PuzzleNode temp = new PuzzleNode();
//instantiate the 2d array and populate it with values of cur
temp.puzzle = new Node[cur.puzzle.length][cur.puzzle[0].length];
for (int j = 0; j < cur.puzzle.length; j++) {
temp.puzzle[j] = cur.puzzle[j].clone();
}
for (int j = 0; j < cur.puzzle.length; j++) {
for (int k = 0; k < cur.puzzle[0].length; k++) {
if (temp.puzzle[j][k].value == possibleSwaps.get(i).value) {
//switch the values, values should always be distinct
int prev = temp.puzzle[zeroNode.x][zeroNode.y].value;
temp.puzzle[zeroNode.x][zeroNode.y].value = possibleSwaps.get(i).value;
temp.puzzle[possibleSwaps.get(i).x][possibleSwaps.get(i).y].value = prev;
}
}
}
//prints out the 2d array that should be the same everytime. But isn't
printPuzzle(cur.puzzle);
}
打印输出示例:
(我想要的原始2d数组)
1 2 3
4 6 8
7 [] 5
(切换[]和6,我需要[]保持原来在前一次迭代中的位置,所以它可以在下一次迭代中与5和7交换)
1 2 3
4 [] 8
7 6 5
(保留在前一次迭代中交换的位置)
1 2 3
4 [] 8
7 5 6
1 2 3
4 [] 8
5 7 6