【问题标题】:Adding objects to array list - end up with same values [closed]将对象添加到数组列表 - 最终得到相同的值[关闭]
【发布时间】:2013-10-14 16:05:01
【问题描述】:

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

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());

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

【问题讨论】:

  • 很确定你的字段是static
  • class piece 是如何实现的

标签: java object arraylist


【解决方案1】:

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 类中 - 您用于存储颜色的任何变量都可能是 static 变量而不是 instance多变的。静态变量与类型相关,而不是与类型的任何特定实例相关,因此如果您在构造函数中覆盖静态变量的值,当您再次获取它时,您将始终看到该值。您希望每个实例具有不同的状态,因此您应该有实例变量。

(另外,你应该改进你的名字,例如Piece而不是piece,和getColor而不是getCol。)

【讨论】:

  • 那真是太快了..
猜你喜欢
  • 2020-11-16
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 2013-09-03
  • 2012-08-02
相关资源
最近更新 更多