为什么新对象会影响当前的对象?

时间:2014-02-04 08:34:42

标签: java eclipse object

我在GameBoard课程中。在这个课程中,我试图创建一个GameTree,它返回一个列表,列出所有可能的下一步动作。当代码的这一部分运行时,它会影响GameBoard这个代码被包含它,导致所有动作实际上都是在GameBoard上进行的,我只是试图通过一次移动来返回它们。以下是GameBoard中的代码:

for(int i = 1; i < 7; i++)
{
    for(int j = 1; j < 7; j++)
    {
        //if valid move, add a board with this move to the list
        if(isValidMove(i, j))
        {
            GameBoard tempBoard = new GameBoard(slots);
            //printout to make sure both object references are different, which they always are
            System.out.println("this board: " + this + " temp: " + tempBoard);
            tempBoard.makeMove(2, i, j);    //use 2 as it is for the AI's move
            tempBoard.rotateA();
            tempBoard.setLastMove(i + " " + j + " " + "A");
            System.out.println("Board with move " + tempBoard.getLastMove());
            tempBoard.printBoard();
            returnList.add(tempBoard);
        }
    }
}

我无法弄清楚为什么这不仅仅是创建一个新的GameBoard对象,播放有效的移动,并将其添加到列表中。相反,在这个for循环结束时,GameBoard充满了所有可能的动作。

编辑:Slots是GameBoard类的私有int [] []。

2 个答案:

答案 0 :(得分:1)

最有可能的问题是,新游戏手柄还使用插槽和旧游戏手柄。 因此,当新游戏板在插槽上执行操作时,它会更改它们,并且因为旧游戏板也使用它们,其状态也会发生变化。

我不知道插槽的结构,但我假设您还应该为新游戏板创建一个新的插槽对象

答案 1 :(得分:-1)

一旦找到有效的移动,你需要突破循环。如果这是一个独立的方法,你可以使用return;将临时板添加到列表后。