Java改变一个数组影响另一个

时间:2017-09-06 17:01:13

标签: java arrays enums copy

所以我正在尝试构建一个在每个节点中都有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符合预期。

0 个答案:

没有答案