有这样一个场景。
一个List中存放有一些数字,需要删除其中所有是1的元素。
很多人可能顺手就写了。
for(int i=0;i<list.size();i++){
if(list.get(i)==1){
list.remove(i);
}
}
实际上这是错误的,我们忽略了删除过程中list的变化,导致最终有一部分1没有被删除。
正解应该是这样的:
for(int i=0;i<list.size();i++){
if(list.get(i)==1){
list.remove(i);
i--;
}
}
或
for(i=list.size()-1;i>=0;i--)
if(list.get(i)==1)
list.remove(i);
类似的情况,我们程序员可能由于“惯性”并没有注意到,在不经意间,我们犯下错误