【问题标题】:Index Out Of Bounds Exception in ArrayList while removing objects删除对象时 ArrayList 中的索引越界异常
【发布时间】:2012-11-01 18:10:59
【问题描述】:

平台:JCreator

我通常使用从后面数的 for 循环,因为理论上删除它们时应该可以正常折叠:

0123456789

去除偶数:

i = 9: 0123456789
i = 8 //remove 8: 012345679
i = 7: 012345679
i = 6 //remove 6: 01234579

等等

但是当对象被删除时我得到了这个异常:

线程“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException 中的异常:索引:3,大小:3

for (int i = dArea.size() - 1; i >= 0; i--) {
    if (dArea.get(i).getOwn() == 1) {
        if (dArea.get(i).getSK() == 2) {
            if (dArea.get(i).getX() - dArea.get(i).getW() / 2 > 1350) {
                dArea.remove(i);
            }
            if (dArea.get(i).getX() + dArea.get(i).getW() / 2 < 0) {
                dArea.remove(i);
            }
            if (dArea.get(i).getY() - dArea.get(i).getH() / 2 > 685) {
                dArea.remove(i);
            }
            if (dArea.get(i).getY() + dArea.get(i).getH() / 2 < 0) {
                dArea.remove(i);
            }
        }
    }
}

任何想法为什么以及如何解决?

【问题讨论】:

    标签: java arraylist indexoutofboundsexception jcreator


    【解决方案1】:

    尝试使用else if 而不是if

    否则循环中的一次迭代可能会删除多个元素(一次用于“w”检查,一次用于“h”检查)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多