2017-08-21 1 views
0

Ich habe ein kleines Problem mit meinem Programm.Iterator und wenn

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

     } 

Wenn ich die if-Klausel deaktivieren meine Ausgabe korrekt ist und sieht wie folgt aus:

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; 

Aber wenn die if-Klausel meine Ausgabe sieht wie folgt aktiviert ist:

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

So Warum?

Antwort

5

Sie fahren den gleichen Iterator zweimal in derselben Iteration der while-Schleife fort (indem Sie zweimal it2.next() aufrufen). Du solltest nicht.

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

Nun ... danke sir =)! –

+0

Ja. Erans Grund ist richtig. Im Allgemeinen, wenn Sie das Objekt manipulieren möchten, ist es ratsam zuerst einen Verweis darauf zu nehmen (verwenden Sie eine temporäre Variable). Viele Programmierer machen diesen Fehler. –

Verwandte Themen