我正在做一个游戏,你作为一个玩家吃点...这些点随机产生,当玩家覆盖点时,他们应该被删除。要做到这一点,我使用的是迭代器。
ArrayList<Dot> dots = new ArrayList<Dot>();
Iterator<Dot> i = dots.iterator();
public Game(){
MouseHandler.mouse = new MouseHandler();
Player.player = new Player(40, 40);
for(int i = 0; i < 20; i++){
dots.add(new Dot());
}
}
public void update(){
Player.player.update();
while(i.hasNext()){
Dot current = i.next();
if(Player.player.getCircle().intersects(current.getCircle())){
i.remove();
}
}
}
执行此操作时,我会在ConcurretModificationException
Dot current = i.next();
这个问题的原因是什么,为什么会发生?
- 真诚的亨里克
编辑:很抱歉这么麻烦,我只是想让代码更短,更易读。
EDIT2:谢谢大家......问题是我在创建Iterator之前没有向集合中添加任何内容。谢谢你的帮助!
答案 0 :(得分:1)
您正在获取异常,因为您是直接修改集合而不是通过迭代器。
您可以使用i.remove()
从迭代器中删除。
答案 1 :(得分:1)
您正在初始字段赋值中创建迭代器,这可能是在构造函数中向集合添加任何内容之前发生的。
删除迭代器字段,然后在while循环之前立即调用dots.iterator()
,分配一个局部变量。