1

私はこのコードを持っています:

for(int i = 0; i < oldCars.size(); ++i)
    {
        if(oldCars.get(i).getVelocity().length() > 0.0f)
        {
            oldCars.get(i).update(timeStep);
        }
        else
        {
            oldCars.remove(i);
        }
    }

正常に動作しているように見えますが、すべての条件で動作しますか?

ありがとう

4

4 に答える 4

10

反復時に削除する場合は、最後から開始します。

for(int i = oldCars.size() - 1; i >= 0; i--)
{
    if(oldCars.get(i).getVelocity().length() > 0.0f)
    {
        oldCars.get(i).update(timeStep);
    }
    else
    {
        oldCars.remove(i);
    }
}
于 2012-11-24T23:22:35.730 に答える
3

すべてのエントリが更新されるわけではないと思います。

エントリを削除すると、iインデックスが上がりますが、次のアイテムも現在のi値になります。

oldcar 1
oldcar 2
oldcar 3

「oldcar 1」を削除すると i が 1 になり、次にチェックするエントリは「oldcar 2」ではなく「oldcar 3」になります。

于 2012-11-24T23:20:29.033 に答える
2
   Iterator<T> it = oldCars.iterator();

    while (it.hasNext()) {
        T oldCar = it.next();
        if (oldCar.getVelocity().length() > 0.0f) {
            oldCar.update(timeStep);
        } else {
            it.remove();
        }
    }
于 2012-11-24T23:24:01.787 に答える
1

メソッドを使用できますが、少し変更してください。リストからアイテムを削除すると、次のアイテムが飛び越えてしまうiため、アイテムを削除するたびにデクリメントする必要があります。したがって、次のようになります。

for(int i = 0; i < oldCars.size(); ++i)
{
    if(oldCars.get(i).getVelocity().length() > 0.0f)
    {
        oldCars.get(i).update(timeStep);
    }
    else
    {
        oldCars.remove(i--);
    }
}
于 2012-11-25T03:16:26.317 に答える