我正在尝试通过阵列列表迭代并打印其中的每个元素,但它仅输出阵列列表中的第一个元素。然后是一个无限的循环,它不断打印出第一个元素。
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
元素,则可能需要使用某种辅助结构,例如另一个列表。
确定使用高级for-loops:
ArrayList<String> startTime = new ArrayList<String>();
for(String aStartTime: startTime){
// do something
}
尝试使用此循环:
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