我在基类级别的更新方法中有以下代码:
while(entities.iterator().hasNext()){
if(entities.iterator().next() != null){
entities.iterator().next().update();
Gdx.app.log(Game.LOG, "Updated Entity "+entities.iterator().next().getName()+".");
}
else{
Gdx.app.log(Game.LOG, "Could not update Entity.");
}
}
但是,此语句将在程序运行时冻结程序,并且必须强制关闭而不提供任何崩溃信息。我可以通过使用if语句而不是一段时间来停止冻结,但是,它只会更新数组中的第一个实体。
什么可能导致冻结,如何在不造成迭代的情况下循环迭代器?
答案 0 :(得分:1)
不要多调用iterator()和next()方法。 iterator()方法将在每次调用时重置迭代器。 next()方法将在每次调用时获取下一个项目。而是使用这样的东西:
Iterator<T> iterator = entities.iterator();
while(iterator.hasNext()) {
T entity = iterator.next();
entity.update();
}
其中T应由您实体的类替换。
编辑,更容易使用语法糖:
for (T entity : entities) {
entity.update();
}