2016-12-16 165 views
0

我想通過ArrayList迭代並打印它中的每個元素,但它只輸出ArrayList中的第一個元素。然後有一個無限循環,並且不斷打印出第一個元素。ArrayList for循環迭代器導致無限循環

ArrayList<String> startTime = new ArrayList<String>(); 

for (int i = 0; i < startTime.size(); i++) { 
    String getTime = startTime.get(i); 
    getTime = convertTime(getTime); 
    startTime.add(i, getTime); 
    System.out.println(startTime.get(i)); 
} 
+2

這是因爲您正在調用'startTime.add(i,getTime);'在循環中 - 您正在循環的每次迭代中向列表中添加一個元素。你爲什麼添加該行?去掉它。 – Jesper

+0

鑑於這裏的代碼,我不知道爲什麼你會期望有什麼不同,你正在訪問數組列表,然後添加到它。因此,無限。 – DejaVuSansMono

+0

這是因爲您正在獲取數據,覆蓋它,獲取數據,覆蓋它等等,一次又一次地達到無窮大。沒有結局。也許你可以在達到某個基準並在那裏打破一個條件。 –

回答

1

當你做startTime.add(i, getTime)你在i位置添加元素。這意味着在下一次迭代中,您將在列表中添加一個額外的元素。當你增加計數器並檢查startTime.size()時,它總是會是true。因此你的無限循環。

作爲一個建議,如果你想添加你的getTime元素,你可能想要使用某種輔助結構,像另一個List。

1

Definitly採用先進的for循環:

ArrayList<String> startTime = new ArrayList<String>(); 
for(String aStartTime: startTime){ 
    // do something 
} 
+0

這可能會解決他的循環問題,但它不會解決操作員明確尋找的所需更新行爲。 – DejaVuSansMono

+0

Hi @DejaVuSansMono,非常感謝您的反饋。我還沒有理解該操作嘗試實現什麼。代碼對我來說沒有意義,文字可能更具表現力。 –

+0

這很公平。 OP沒有很好地解釋理想的行爲。我可能自己解釋錯了。 – DejaVuSansMono

0

嘗試使用這個for循環:

for(int i=0,n=startTime.size();i<n;i++){ 
    //your for-loop code here 

} 

當你添加元素startTime,它正在增加它的大小。因此,它加大了無限期滿足的邊界。在我的示例中,n將在循環開始時設置爲startTime的大小,並且在循環執行時不會更改。