复制 Java 个变量
Copy Java Variables
我的程序中有以下内容:
public static GameBoard possibleStates(GameBoard GameState, int turn)
{
printGameBoard(GameState); //getting what is passed in here
int innerCounter = 0;
int outerCounter = 0;
while(outerCounter < 3)
{
while(innerCounter < 3)
{
if(GameState.Board[outerCounter][innerCounter].isEmpty())
{
GameBoard PossibleBoard = new GameBoard();
PossibleBoard.Copy(GameState);
PossibleBoard.Board[outerCounter][innerCounter].ModifyOccupy(move); //the problem is here, changes to possibleboard are also reflected in gamestate
GameState.AddToActions(PossibleBoard);
}
innerCounter++;
}
innerCounter = 0;
outerCounter++;
}
return GameState;
}
我的问题是改变一个,改变另一个的值。我知道这是因为他们在内存中引用了相同的 space,我只是不知道如何不让他们那样做。我已经尝试过对我的游戏板使用 Copy 方法和 Clone 方法 class,它们没有任何区别。
在实际创建副本的复制方法内部,您需要创建一个深拷贝。那就是复制引用是不够的,您还需要创建新对象并使用原始对象的状态对其进行初始化。
只有这样,它才是一个完全独立的对象,不会改变原来的对象。
这可能是一个有用的细节
What is the difference between a deep copy and a shallow copy?
我的程序中有以下内容:
public static GameBoard possibleStates(GameBoard GameState, int turn)
{
printGameBoard(GameState); //getting what is passed in here
int innerCounter = 0;
int outerCounter = 0;
while(outerCounter < 3)
{
while(innerCounter < 3)
{
if(GameState.Board[outerCounter][innerCounter].isEmpty())
{
GameBoard PossibleBoard = new GameBoard();
PossibleBoard.Copy(GameState);
PossibleBoard.Board[outerCounter][innerCounter].ModifyOccupy(move); //the problem is here, changes to possibleboard are also reflected in gamestate
GameState.AddToActions(PossibleBoard);
}
innerCounter++;
}
innerCounter = 0;
outerCounter++;
}
return GameState;
}
我的问题是改变一个,改变另一个的值。我知道这是因为他们在内存中引用了相同的 space,我只是不知道如何不让他们那样做。我已经尝试过对我的游戏板使用 Copy 方法和 Clone 方法 class,它们没有任何区别。
在实际创建副本的复制方法内部,您需要创建一个深拷贝。那就是复制引用是不够的,您还需要创建新对象并使用原始对象的状态对其进行初始化。
只有这样,它才是一个完全独立的对象,不会改变原来的对象。
这可能是一个有用的细节
What is the difference between a deep copy and a shallow copy?