2012-02-11 45 views
1

目前我正在編寫一個程序,它必須在for循環中迭代和arraylist,看起來像這樣。迭代的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循環一次。這是因爲在第一次循環之後,它只向nextLevel數組中添加一個數字,而currentLevel數組的索引量與之前一樣?還是我要離開的東西?如果我嘗試while循環後更多的元素添加到nextLevel陣列它給了我一個錯誤在

int element = it.next(); 
+0

什麼是「數字」? – 2012-02-11 00:06:03

+0

你想讓這段代碼做什麼?不知道你在做什麼,不可能知道代碼應該是什麼樣子。 – ams 2012-02-11 00:07:38

+0

我想爲數學項目做一個反向Collat​​z網絡,如果你想看看這裏的一些代碼http://stackoverflow.com/questions/9186198/java-reverse-collat​​z-web#comment11558888_9186198 – coopf 2012-02-11 01:05:27

回答

3

你進入for多次循環線,但只能在第一次進入while循環通過for循環。

迭代器itfor循環之外定義,並且只分配一次。

第一次通過for循環您輸入while循環:

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

從而徹底耗盡了迭代器。隨後每經過for循環,it.hasNext()都爲false,因此while循環不執行任何操作。

您還試圖重新使用nextLevelcurrentLevel,但這些只能分配一次。因此currentLevel將僅包含添加到nextLevel的最後一組元素。

如果我嘗試在該行

你可能會得到一個併發修改例外後while循環附加元素添加到nextLevel陣列它給了我一個錯誤。修改後不能使用迭代器作爲列表。 https://stackoverflow.com/a/1496206/20394解釋瞭如何處理這些問題。