2

私のクラス「Bomb」のJavaのArrayListがあります。

このクラスにはメソッド「isExploded」があります。このメソッドは、爆弾が爆発した場合はtrueを返し、そうでない場合はfalseを返します。

ここで、この配列リストを反復処理しようとしています。このメソッドisExplodedを呼び出し、trueが返された場合はリストから要素を削除します。

私は反復する方法を知っています:

    for (Iterator i = bombGrid.listIterator(); i.hasNext();) {
    if () {         
        i.remove();
}

しかし、イテレータを介してメソッドisExploded oftheBombクラス自体にアクセスする方法がわかりません。誰かがこれに対する答えを知っていますか?

心から、

Luxo

4

3 に答える 3

5

を使用して爆弾を取得する必要があります:

for (Iterator i = bombGrid.listIterator(); i.hasNext();) {
   Bomb bomb = (Bomb) i.next(); 
   if (bomb.isExploded()) i.remove();
}

Iterator<Bomb>または、bombGridからを取得できる場合(それはArrayList<Bomb>?):

Iterator<Bomb> i = bombGrid.listIterator();
while (i.hasNext()) {
   Bomb bomb = i.next(); 
   if (bomb.isExploded()) i.remove();
}

これは、イテレータがをサポートしremoveていることを前提としています。これは、たとえば、で指定されたものの場合ですArrayList

于 2012-12-12T20:07:20.390 に答える
0

Java 5を使用する場合は、ジェネリックを使用します。

List<Bomb> bombGrid = ...;
for (Iterator<Bomb> i = bombGrid.iterator(); i.hasNext();) {
  if (i.next().isExploded()) {         
    i.remove();
  }
}
于 2012-12-12T20:09:12.540 に答える
-2

いいえ、反復中にArrayListのイテレータ内を削除することはできません。これがJavadocの抜粋です。

このクラスのイテレータメソッドとlistIteratorメソッドによって返されるイテレータはフェイルファストです。イテレータの作成後にリストが構造的に変更された場合、イテレータ自体のremoveまたはaddメソッド以外の方法で、イテレータはConcurrentModificationExceptionをスローします。したがって、同時変更に直面した場合、イテレータは、将来の不確定な時点で任意の非決定論的な動作のリスクを冒すのではなく、迅速かつクリーンに失敗します。

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

于 2012-12-12T20:21:07.530 に答える