今天寫一個前端邏輯的時候碰到了這種情況,並在前端小姐姐面前裝了一把☺☺☺
並且這個問題貌似我在實際開發中碰到的次數還是挺多的,所以記錄一下,但是用的語言是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);
}
不會出問題的原因
輸出結果