2016-11-13 93 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循环内。