0

基本レベル クラスの update メソッドに次のコードがあります。

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.");
        }
    }

ただし、このステートメントを実行するとプログラムがフリーズするため、クラッシュ情報を提供せずに強制終了する必要があります。while の代わりに if ステートメントを使用してフリーズを停止できますが、配列内の最初のエンティティのみが更新されます。

フリーズの原因は何ですか?また、フリーズを引き起こさずにイテレータをループするにはどうすればよいでしょうか?

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 に答える