我调试了代码,并发现每次向ArrayList
添加新元素时,所有先前的元素都会被新元素替换。此类或关联的类中没有静态字段或方法。我能做错什么?提前谢谢!
**更新** GameState gs的字段,一切都是正确的,这就是我想要的。但每次添加到childrenList时,所有以前的元素都会替换为当前元素。
例如 -
1st iteration - gs = 1
[1]
2nd iteration - gs = 2
[2, 2]
3rd iteration - gs = 3
[3, 3, 3]
what I want is [1, 2, 3]
我的代码看起来像这样......
public List getChildren(){
ArrayList<GameStateChild> childrenList = new ArrayList<GameStateChild>();
List<Map<Integer, Action>> act = getActionPairs();
for (Map<Integer, Action> action : act) {
GameState gs = executeAction(action);
childrenList.add(new GameStateChild(action, gs));
}
return childrenList;
}
答案 0 :(得分:1)
以下是可能发生的事情:您的游戏状态对象都是指同一个游戏状态对象。更改其中一个的值会改变所有这些值。
换句话说,你的代码深处的某个地方可能会发生与此类似的事情:
GameState gs1 = returnsAGameState();
GameState gs2 = gs1;
changeThisGameState(gs2);
在此代码中,gs1
和gs2
指的是计算机中完全相同的位置。因此,对gs2
的任何更改也都会更改为gs1
。
您发布的代码似乎没有任何问题。我猜这个问题来自对executeAction(gs)
方法的调用 - 试试看那里。
答案 1 :(得分:0)
检查GameState中的gs变量是否为非静态。
我想知道这是否真的发生了。 ArrayList的add方法仅适用于addreses,并且每次都插入新对象,因此除非您手动更改它们,否则它不应该覆盖以前的对象。