1

1 から 10 までの要素を持つリストがあります。そこから素数 2,3,5,7 を削除し、イテレータを使用して残りのリストを出力しようとしましたが、このコードは NoSuchElementExceptionをスローします。これは私のコードです:

public static void editerate2(Collection<Integer> list3)
{
    Iterator<Integer> it=list3.iterator();
    while(it.hasNext())
    {
        if(it.next()==2 || it.next()==3 || it.next() ==5 || it.next()==7 ) 
        {
            it.remove();
        }
    }
    System.out.println("List 3:");
    System.out.println("After removing prime numbers  : " + list3);
}

これを行う正しい方法は何ですか?また、「|」の使用の違いは何ですか と「||」???

4

2 に答える 2

6

イテレータを呼び出すたびit.next()に、次の要素に進みます。

これはあなたがやりたいことではないと思います

代わりにこれを行う必要があります。

Iterator<Integer> it = list.iterator();

while (it.hasNext()) {
    Integer thisInt = it.next();
    if (thisInt == 2 || thisInt == 3 || thisInt == 5 || thisInt == 7) {
       it.remove();
    }
}

| の違い および ||:

を使用||し、最初の部分が true の場合、2 番目の部分は評価されません。

|両方のパーツを使用する場合は、常に評価されます。

これは、次のような場合に便利です。

if (person == null || person.getName() == null) {
    // do something
}

|上記のスニペットを使用して person が nullの場合、NullPointerException がスローされます。

これは、条件の両方の部分を評価し、後半で null オブジェクトを逆参照するためです。

于 2012-12-12T02:30:44.687 に答える
1

次の要素に進むため、イテレータを複数回呼び出すことは避けたいと考えています。

できることは、反復ごとに取得した値を保持してから、比較を行うことです。

while(it.hasNext()) {
    Integer next = it.next();
    if(next == 2 || next == 3 || next == 5 || next == 7 ) {
        it.remove();
    }
}
于 2012-12-12T02:33:53.940 に答える