所以我正在尝试构建一个在每个节点中都有2d枚举的searchtree。所以我有这个板类,它有一个我的Cell枚举的二维数组。我遍历这个单元格数组以找到可能的移动,当找到一个时,我想在树中存储2d数组的当前状态。每当我发现这个动作时,我想改变该枚举中某些枚举的状态并将其放入树中,然后继续寻找更多动作。现在当我翻转这些动作时出现问题,因为它似乎影响每个2d阵列,即使它们不是同一个对象!下面是一些PsudoCode与我的真实代码混合,以显示要点: TreeBuilder.Java
When move is found
board.Flip(coordinates, color);
tree.add(new Board(board.getCells()));
Board.Java
public void flipDiscs(List<int[]> coordinates, Cell colorToChangeTo) {
for (int[] discCoordinate : coordinates) {
this.cells[discCoordinate[0]][discCoordinate[1]] = colorToChangeTo;
}
}
public Board(Cell[][] cells) {
this.cells = Arrays.copyOf(cells, cells.length);
}
每当我这样做时,所有单元格数组都会发生变化,从而导致错误的状态。 Here is an image of the debugger after running this code:
我创建了一个仅用于测试Arrays.copyOf方法的示例,它按预期工作:
private enum LigthSwitch{
On,
Off
}
public static void main(String[] args) {
LigthSwitch[] firstFloor = new LigthSwitch[]{LigthSwitch.On, LigthSwitch.On};
LigthSwitch[] secondFloor = new LigthSwitch[]{LigthSwitch.On, LigthSwitch.On};
LigthSwitch[] thirdFloor = Arrays.copyOf(firstFloor, firstFloor.length);
secondFloor[0] = LigthSwitch.Off;
}
运行此代码会导致secondFloor[0] == LightSwitch.Off
符合预期。