我有一个2d的堆栈数组。
public Stack<Integer>[][] GameBoard = new Stack[3][3];
//make square
public Stack<Integer> Square = new Stack<>();
public Stack<Integer>[][] FillBoard() {
//initialize each square to have 0
Square.push(0);
//fill board with squares
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
GameBoard[i][j] = Square;
}
}
GameBoard[1][1].push(1);
return GameBoard;
}
在这段代码中,我给2d数组中的每个堆栈一个堆栈,Square
,元素为0。然后,当我试图将元素添加到某个堆栈(GameBoard[1][2].push(1)
)时,它将其添加到数组中的每个堆栈中。所以它返回的不是{{0,0,0},{0,1,0},(0,0,0}}
,而是{{1,1,1},{1,1,1},{1,1,1}}
。我唯一的猜测是,在堆栈类中,堆栈使用的列表是静态的?提前谢谢你。
这是因为您将Gameboard
中的每个堆栈设置为相同的堆栈Square
。因此,每次将一个元素压入Gameboard
中的任何一个堆栈时,也会将同一个元素压入Gameboard
中的每个其他堆栈。换句话说,由于在Fillboard()
函数中将Gameboard
中的每个元素设置为相同的堆栈,因此Gameboard
中的每个元素将始终相同。相反,应该为每个元素使用一个新的堆栈,如下所示(根据java命名惯例,将GameBoard
重命名为gameboard
):
public Stack<Integer>[][] gameboard = new Stack[3][3];
public Stack<Integer>[][] FillBoard() {
//fill board with squares
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
Stack<Integer> square = new Stack<>();
square.push(0);
gameboard[i][j] = square;
}
}
gameboard[1][1].push(1);
return gameboard;
}