簡體   English   中英

ArrayList for 循環迭代器導致無限循環

[英]ArrayList for loop iterator causing infinite loop

我試圖遍歷一個 ArrayList 並打印其中的每個元素,但它只輸出 ArrayList 中的第一個元素。 然后是一個無限循環,它不斷打印出第一個元素。

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));
}

絕對使用高級 for 循環:

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

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

作為建議,如果您想添加getTime元素,您可能需要使用某種輔助結構,例如另一個 List。

嘗試使用這個 for 循環:

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

}

當您向startTime添加元素時,它會增加其大小。 因此,它提高了i必須無限滿足的邊界。 在我的示例中, n將在循環開始時設置為startTime的大小,並且不會隨着循環執行而改變。

您可以嘗試向后循環(從最后一個元素到第一個元素),例如:

// assume that I have ArrayList variable named *list*

for(int i = list.size() - 1 ; i >= 0 ; i--){
    list.add(//something);
}

這段代碼不會給你一個無限循環,因為即使你的列表大小不斷變化,循環控制變量也永遠不會改變( i >= 0 )。 下限將始終為 0,而i將向 0 遞減

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM