繁体   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