报告升序计数循环中的 list.remove(index) 调用。

这很可疑,因为移除后列表变短,下一个元素被跳过。 简单的修复方法是在移除后减小索引变量,但更稳健的做法可能是通过迭代器或使用 removeIf() 方法 (Java 8 及更高版本) 移除。 如果您不希望 remove() 在循环中被多次调用,不妨在它后面添加 break

示例:

  public static void main(String[] args) {
    process(new ArrayList<>(
      Arrays.asList("1", "2", "|", "3", "4")));
  }

  static void process(List<String> list) {
    for (int i = 0; i < list.size(); i++) {
      if (list.get(i).equals("|")) {
        list.remove(i);
        continue;
      }
      System.out.println(list.get(i));
    }
  }

代码看起来像是会打印 1 2 3 4,但实则在输出中将跳过 3

2018.2 的新功能