2016-12-16 116 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的大小,并且在循环执行时不会更改。