Java二维栈数组单栈添加元素异常问题求助
问题解答
问题的核心不是Stack类内部的列表是static的,而是你把同一个Square栈实例赋值给了二维数组的所有元素:
- 你创建的那个push(0)的Square栈是一个独立对象,在内存中只有一份。
- 当你在FillBoard方法里把这个栈赋值给GameBoard的每个位置时,并没有为每个位置生成新的栈,只是把同一个对象的引用复制给了数组的所有元素。
- 这意味着GameBoard里的所有元素本质上都指向同一个栈实例,不管你通过哪个索引操作,都是在修改同一个栈,所以push(1)后所有“栈”都会显示有1——它们本来就是同一个东西。
解决方法很简单:不要复用同一个栈对象,而是为数组的每个位置单独创建新的Square栈实例:
// 示例代码(Java) for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Square stack = new Square(); stack.push(0); GameBoard[i][j] = stack; } }
内容的提问来源于stack exchange,提问作者Thomas Cameron
相关产品推荐
相关产品推荐

