2017-08-21 5 views
0

私のプログラムに少し問題があります。イテレータとIf

Iterator<MyString> it = globalSet.iterator(); 
Iterator<String> it2 = globalArray.iterator(); 



     while(it.hasNext() && it2.hasNext()) 
     { 
      System.out.println(it2.next()); 
      if(it.next().getLine().contains(it2.next()) == true) 
      { 


       //it.remove(); 
      } 

     } 

私はif節を無効にした場合、私の出力が正しく、次のようになります。

1;Trägertour 096;1410;Autotour 1N410; 
2;Trägertour 097;1410;Autotour 1N410; 
3;Trägertour 098;1410;Autotour 1N410; 
4;Trägertour 099;1410;Autotour 1N410; 
5;Trägertour 100;1410;Autotour 1N410; 

しかし、if節が有効になっている場合は、私の出力は次のようになります。だから、

1;Trägertour 096;1410;Autotour 1N410; 
3;Trägertour 098;1410;Autotour 1N410; 
5;Trägertour 100;1410;Autotour 1N410; 

どうして?

答えて

5

whileループの同じ繰り返し(同じコードをit2.next()を2回呼び出して)で同じイテレータを2回進めます。あなたはしないでください。

while(it.hasNext() && it2.hasNext()) { 
     String str = it2.next(); 
     System.out.println(str); 
     if(it.next().getLine().contains(str)) { 
      //it.remove(); 
     } 
    } 
+0

まあ...ありがとうございます!)! –

+0

はい。エランの理由は正しい。一般に、オブジェクトを操作したいときは、そのオブジェクトを参照する(一時変数を使用する)のが賢明です。多くのプログラマがこのミスを犯しています。 –

関連する問題