2017-06-09 9 views
2

以下のプログラムを実行すると、ただ、ダブルネストされたリストイテレータ。プログラムは終了しません

マルティ

次のように結果を印刷した後に何も印刷されません取得し、また、プログラムが終了しません。

public class NewClass { 
    public static void main(String[] args) { 
     List<String> cars = new ArrayList<String>(); 
     cars.add("Maruti"); 
     cars.add("Hundai"); 
     cars.add("Polo"); 
     Iterator<String> literate1 = cars.iterator(); 
     while (literate1.hasNext()){ 
      System.out.println(literate1.next()); 
      literate1.remove(); 
      Iterator<String> literate2 = cars.iterator(); 
      while (literate2.hasNext()){ 
      } 
     } 
    } 
} 

出力

Maruti 

このプログラムは終了していない直後。何が起こっているのか説明できますか?

答えて

1

literate2.hasNext()は常にtrueを返します。だからwhileループは決して終わらないでしょう。

1
while (literate2.hasNext()){ 
} 

ここに無限ループがあります。 next()を呼び出すまで、hasNext()はもっと多くのアイテムがある場合は常にtrueを返します。

1

以下のコードを確認してください。それが動作します。

List<String> cars = new ArrayList<String>(); 
cars.add("Maruti"); 
cars.add("Hundai"); 
cars.add("Polo"); 
Iterator<String> literate1 = cars.iterator(); 
while (literate1.hasNext()) { 
    System.out.println(literate1.next()); 
} 

コードでは、内部whileループの条件はliterate2.hasNext()です。それは実際には常に真実を戻しています。そのため、無限ループを作り出しています。

関連する問題