2016-06-26 10 views
0

Hier ist ein Code über Listiterator. Arbeite richtig in Vorwärtsrichtung, aber wenn es rückwärts iteriert, geht es in Endlosschleife. nach jedem element drucke ich ein plus und am ende wird eine liste erzeugt. funktioniert gut, wenn Rückwärtsiteration nicht enthalten ist, aber Problem mit Rückwärts. warum es passiert, weiß ich nicht?Rückwärtsliste Iteration mit Iterator

  package iteratordemo; 
      import java.util.*; 

      /** 
      * 
      * @author New 
      */ 
      public class IteratorDemo { 

       /** 
       * @param args the command line arguments 
       */ 
       public static void main(String[] args) { 
        // TODO code application logic here 


       ArrayList<String> al=new ArrayList<String>(); 

       al.add("a"); 
       al.add("b"); 
       al.add("c"); 
       al.add("d"); 
       al.add("e"); 


       System.out.println("original content of al:" +al); 
       Iterator<String> itr=al.iterator(); 

       while(itr.hasNext()){ 
        String element=itr.next(); 
        System.out.println(element + " "); 
       } 

       System.out.println(); 

     /* modify the object being iterated 

      */  
       ListIterator litr=al.listIterator(); 
       while(litr.hasNext()){ 
        Object element = litr.next(); 
        litr.set(element + "+"); 
        System.out.println("modified content of al: "); 
        itr=al.iterator(); 
        while(itr.hasNext()) 
        { 
         element=itr.next(); 
         System.out.println(element + " "); 

        } 
        System.out.println(); 

// now display the list backward 
// while returning in backward direction it goes into infinite loop     
        System.out.println("modified list backwards:"); 
        while(litr.hasPrevious()){ 

         element= litr.previous(); 
         System.out.println(element + " "); 

        } 
        System.out.println(); 

       }  
       } 

      } 
+0

Es scheint, dass Sie für jeden Schritt gehen Sie in Ihrer Liste Iterator mit dem "nächsten" Anruf gehen Sie zurück zum Anfang der Liste mit dem "vorherigen" Anruf. Daher wird die Liste niemals durchlaufen, da der Cursor die ganze Zeit vorwärts und rückwärts läuft. Sie können die Rückwärtsiteration nach Abschluss der Vorwärtsiteration in Betracht ziehen. – elfwyn

Antwort

1

ListIterator ist eine Art Cursor, der auf ein Element zeigt. Methoden ListIterator.next() und ListIterator.previous() Bewegen Sie diesen Cursor zu einem anderen Element, so dass Ihr Code es wiederholt vorwärts und rückwärts bewegt, was eine Endlosschleife verursacht.

+0

Also was kann die Lösung sein, wenn Sie eine Idee haben. –