2016-11-13 2 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を複数回(2回)呼び出す –

+0

タイトルをよりわかりやすいものに変更してください。 – Maroun

+0

'snake.next()'はイテレータを次の要素に進めます。 – janos

答えて

1

あなたはwhileループ 内Iterator.next()複数回(2回)を呼び出している...それはbehavを説明する理由です...

あなたのリストは、この要素があります。1,2,5,7- 、10及び13 このラインSystem.out.println(snake.next());破棄素子1,5,10

はBTWリストはあなたの例では生であるプリント、私は想像することができ、条件snake.nect()== 7ループを壊すことはありません。

私は、あなたがする必要がありますオブジェクトコードが原因 互換性のないオペランドの型のコンパイルされていない事実で、それを修正するために、ハードに試してみて、あなたが適切コレクションをコーディングする場合(生使用していない) を int型ませんでしたあなたは、次のようなコードを変更する必要があり

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

のような別の変数に代入してみてください。なぜ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ループ内に1回あります。

関連する問題