0

我在基级类的更新方法中有以下代码:

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 语句而不是 while 来停止冻结,但是,它只会更新数组中的第一个实体。

什么可能导致冻结,迭代器如何循环而不导致它?

4

1 回答 1

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();
}
于 2013-08-15T21:59:03.723 回答