Java将元素压入2d堆栈数组的单个堆栈中



我有一个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;
}

最新更新