今天写一个前端逻辑的时候碰到了这种情况,并在前端小姐姐面前装了一把☺☺☺
并且这个问题貌似我在实际开发中碰到的次数还是挺多的,所以记录一下,但是用的语言是java —》 重要的是思想!!!
1 抽象出来的题目
假设有如下数组,数组中的元素我们事先并不知道,现在要求在一个循环内将B和E删掉。
2 错误的示范
会出问题的code
public static void main(String[] args) {
List<String> list = new ArrayList<>(5);
list.add("C");
list.add("A");
list.add("B");
list.add("E");
list.add("D");
for (int i = 0; i < list.size(); i++) {
if ("B".equals(list.get(i)) || "E".equals(list.get(i))) {
list.remove(i);
}
}
System.out.println(list);
}
出问题的原因 (相信原因大家肯定都知道,我这里简单描述一下):
输出结果
3 正确的答案
不会出问题的code
public static void main(String[] args) {
List<String> list = new ArrayList<>(5);
list.add("C");
list.add("A");
list.add("B");
list.add("E");
list.add("D");
//注意i的初始值一定为list.size() - 1, 因为这才是数组中的最后一个数据
//判断条件一定是i>=0,不能是i>0, 因为i = 0 也要参与逻辑的运算
for (int i = list.size() - 1; i >= 0; i--) {
if ("B".equals(list.get(i)) || "E".equals(list.get(i))) {
list.remove(i);
}
}
System.out.println(list);
}
不会出问题的原因
输出结果