2017-08-21 4 views
0

J'ai eu un petit problème avec mon programme.Iterator et Si

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(); 
      } 

     } 

Si je désactive la clause if ma sortie est correcte et ressemble à ceci:

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; 

Mais si la clause if est activée ma sortie ressemble à ceci:

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

Alors Pourquoi?

Répondre

5

Vous avancez deux fois le même itérateur dans la même itération de la boucle while (en appelant deux fois it2.next()). Tu ne devrais pas.

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

Eh bien ... merci monsieur =)! –

+0

Oui. La raison d'Eran est correcte. Généralement quand vous voulez manipuler l'objet, il est sage d'en prendre d'abord une référence (utilisez une variable temp). Beaucoup de programmeurs font cette erreur. –