ArrayList for循环迭代器导致无限循环
我想通过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));
}
当你做startTime.add(i, getTime)
你在i
位置添加元素。这意味着在下一次迭代中,您将在列表中添加一个额外的元素。当你增加计数器并检查startTime.size()
时,它总是会是true
。因此你的无限循环。
作为一个建议,如果你想添加你的getTime
元素,你可能想要使用某种辅助结构,像另一个List。
Definitly采用先进的for循环:
ArrayList<String> startTime = new ArrayList<String>();
for(String aStartTime: startTime){
// do something
}
这可能会解决他的循环问题,但它不会解决操作员明确寻找的所需更新行为。 – DejaVuSansMono
Hi @DejaVuSansMono,非常感谢您的反馈。我还没有理解该操作尝试实现什么。代码对我来说没有意义,文字可能更具表现力。 –
这很公平。 OP没有很好地解释理想的行为。我可能自己解释错了。 – DejaVuSansMono
尝试使用这个for循环:
for(int i=0,n=startTime.size();i<n;i++){
//your for-loop code here
}
当你添加元素startTime
,它正在增加它的大小。因此,它加大了无限期满足的边界。在我的示例中,n
将在循环开始时设置为startTime
的大小,并且在循环执行时不会更改。
这是因为您正在调用'startTime.add(i,getTime);'在循环中 - 您正在循环的每次迭代中向列表中添加一个元素。你为什么添加该行?去掉它。 – Jesper
鉴于这里的代码,我不知道为什么你会期望有什么不同,你正在访问数组列表,然后添加到它。因此,无限。 – DejaVuSansMono
这是因为您正在获取数据,覆盖它,获取数据,覆盖它等等,一次又一次地达到无穷大。没有结局。也许你可以在达到某个基准并在那里打破一个条件。 –