【发布时间】:2015-09-15 04:37:45
【问题描述】:
我正在制作一个游戏,你作为玩家吃点...这些点随机生成,当玩家覆盖这些点时,它们应该被移除。为此,我使用了一个迭代器。
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();
}
}
}
执行此操作时,我会在Dot current = i.next(); 获得ConcurretModificationException
这个问题的原因是什么,为什么会发生?
-真诚的亨利克
编辑:很抱歉,我只是想让代码更短、更易读。
EDIT2:谢谢大家...问题是我在创建迭代器之前没有向集合中添加任何内容。感谢大家的帮助!
【问题讨论】:
-
使用 I.remove() 代替。
-
因为您正在修改您正在遍历列表而不是迭代器的列表。
-
不,这不是问题...使用 i.remove 不起作用
-
@Devtons 那么您需要提供更多信息,因为您正在做的事情会导致该错误,而通过迭代器将其删除则不会。
-
请编写可以编译的代码。您的代码在语法上无效(在某个其他方法的中间有一个 ctor,或者在执行删除的代码周围缺少一个方法)。
标签: java arraylist while-loop iterator