2012-02-11 14 views
1

現在、私はこのように見えるforループの中のarraylistとitraateを必要とするプログラムを書いています。繰り返しのJavaの問題

List<Integer> currentLevel = new ArrayList<Integer>(); 
List<Integer> nextLevel = new ArrayList<Integer>(); 
Iterator<Integer> it = currentLevel.iterator(); 
currentLevel.add(1); 

for(x=0;x<20;x++){ 
    while(it.hasNext()){ 
     int element = it.next(); 
     nextLevel.add(element*2); 
     if(element%6 == 4){ 
      nextLevel.add((element-1)/3); 
     } 
    } 
    currentLevel.clear(); 
    currentLevel.addAll(nextLevel); 
    nextLevel.clear(); 
} 

このコードでは、whileループを1回だけ通過することがわかります。これは、最初のループの後にnextLevel配列に1つの数値を追加するだけで、currentLevel配列は以前と同じ量のインデックスを持つためですか?それとも私が去っていくものなのでしょうか?私は、whileループの後nextLevelアレイに追加要素を追加しようとした場合、それはあなたがforループを複数回入力している

int element = it.next(); 
+0

"数字"とは何ですか? –

+0

このコードをどうしようとしていますか?あなたがしようとしていることを知らずに、コードがどのように見えるかを知ることができません。 – ams

+0

私は数学プロジェクト用の逆Collat​​z Webを作成しようとしていますが、ここでいくつかのコードを見たいと思っています。http://stackoverflow.com/questions/9186198/java-reverse-collat​​z-web#comment11558888_9186198 – coopf

答えて

3

ラインで私にエラーを与えるが、最初にwhileループを入力することができますforループを通過します。

反復子itは、forループの外側で定義され、一度だけ割り当てられます。完全にイテレータを使い果たす

while(it.hasNext()){ 
    int element = it.next(); 
    ... 
} 

for最初のループでは、あなたはwhileループを入力します。それ以降のすべての時間はforループ、it.hasNext()はfalseであるため、whileループは何も行いません。

また、nextLevelcurrentLevelを再利用しようとしていますが、それらは一度だけ割り当てられます。したがって、currentLevelには、nextLevelに最後に追加された要素のみが含まれます。

私はそれが私にあなたはおそらく、同時変更例外を取得しているライン

でエラーが発生しますwhileループの後nextLevelアレイに追加要素を追加しよう。イテレータを変更した後は、イテレータをリストに使用することはできません。 https://stackoverflow.com/a/1496206/20394は、これらの問題に対処する方法を説明しています。

関連する問題