-1

有点奇怪。我正在尝试创建一个棋盘游戏(西洋双陆棋)并创建了一个名为片段的对象。在我的板上,我正在尝试创建一个数组列表

ArrayList<piece> pieces = new ArrayList<piece>();

piece newPiece = new piece(1, 1, "red", "top");
piece newPiece2 = new piece(1, 2, "black", "top");

pieces.add(newPiece);
System.out.println(newPiece.getCol());
pieces.add(newPiece2);
System.out.println(newPiece2.getCol());

我期待输出是“红色”然后是“黑色”,但实际上我得到的是“黑色”然后是“黑色”?有什么建议为什么会发生这种情况?

4

1 回答 1

9

ArrayList是一个红鲱鱼 - 你甚至永远不会再把碎片拿出来。只需以下代码,您就会看到完全相同的行为:

piece newPiece = new piece(1, 1, "red", "top");
piece newPiece2 = new piece(1, 2, "black", "top");
System.out.println(newPiece.getCol());
System.out.println(newPiece2.getCol());

我强烈怀疑该错误存在于piece类中-您用于存储颜色的任何变量都可能是静态变量而不是实例变量。静态变量与类型相关,而不是与类型的任何特定实例相关,因此如果您在构造函数中覆盖静态变量的值,当您再次获取该值时,您将始终看到该值。您希望每个实例具有不同的状态,因此您应该有实例变量。

(此外,你应该改进你的名字,例如Piece代替piece,和getColor代替getCol。)

于 2013-10-14T16:06:17.467 回答