2016-11-13 105 views
1
public class Show { 
    public static ArrayList Ara = new ArrayList(); 
    public static Iterator snake; 

    public static void kai(){ 
     Ara.add(1); 
     Ara.add(2); 
     Ara.add(5); 
     Ara.add(7); 
     Ara.add(10); 
     Ara.add(13);   
     snake = Ara.iterator(); 
     while(snake.hasNext()){ 
      System.out.println(snake.next()); 
      if(snake.next()==7)break; 
     } 
    }  

    public static void main(String[] args){ 
     kai(); 
    } 
} 

執行時,連續打印出1,5,10個。我如何解釋這一點?我預計1,2,5將會打印出來。Java迭代器的東西

+1

您正在多次撥打.next(兩次) –

+0

請將您的標題更改爲更具描述性的內容。 – Maroun

+0

'snake.next()'將迭代器推進到下一個元素。 – janos

回答

1

您所呼叫的同時,循環 內Iterator.next()多次(兩次)......這就是解釋了behav的原因...

列表中的這個元素:1,2,5,7 ,10和13 和這條線System.out.println(snake.next());丟棄並打印元件1,5,10

BTW該列表是在例如原料,所以可以想像,條件snake.nect()== 7永遠不會滿足,因此不會破環

我並沒有試圖努力解決相關問題,其實代碼是不是因爲 數不兼容類型的對象進行編譯和int 如果你的代碼正確集合(不使用RAW) ,那麼你將需要這樣做

if (((Integer) snake.next()).intValue() == 7) 
+0

好,但這並不能解釋爲什麼10打印出來,對嗎?我明白爲什麼1打印出來,2是跳過,5打印出來。但是,對snake.next()的調用會返回7,並且循環執行應該停止。 –

+0

@TonyMarshle ...完成託尼,我更新了我的答案。 –

2

您應該更改如下代碼:

public static void kai(){ 
    Ara.add(1); 
    Ara.add(2); 
    Ara.add(5); 
    Ara.add(7); 
    Ara.add(10); 
    Ara.add(13);   
    snake = Ara.iterator(); 
    while(snake.hasNext()){ 
     int value = (int) snake.next(); 
     System.out.println(value); 
     if(value ==7)break; 
    } 
}  

這樣,你只有c所有iterator.next()一次在while循環內。