我为有限的标题道歉,但我不知道如何准确地描述这个问题。我有一个for循环遍历包含对象的arrayList。其中一个对象方法是在不同时间点设置的布尔值。 for循环的要点是遍历arrayList并删除包含boolean的每个项为false。
if(!arrayList.isEmpty()){
int len = arrayList.size();
for(int i=0; i<len; i++){
if(!arrayList.get(i).isStartTimer()){
arrayList.remove(i);
}
}
}
for循环总是在数组中留下太多对象。这是因为每次for循环循环时,由于数组中删除的项目和最后一个对象,len会下降一个,它会在删除对象之前取消for循环。我理解这个问题,但我无法弄清楚如何解决它。我已经尝试过像len + 1这样的东西,但是当我对它做任何事情时它抛出一个indexOutOfBounds异常。有任何想法吗?另外,这是我做我想做的最好的方式吗?
答案 0 :(得分:2)
你可以切换到:
if( ! arrayList.isEmpty() ){
int i = 0;
while( i < arrayList.size() ) {
if( ! arrayList.get(i).isStartTimer() ){
arrayList.remove(i);
continue; // skip i++
}
i++;
}
}
答案 1 :(得分:1)
你应该向后循环,这样你就不会使用你删除的项目之后的标记。
for (int i = arrayList.size() - 1; i >= 0; i--) {
}
或者,您可以递减i
以使用下一个索引,并删除len
变量,以便结束条件使用实际长度。