检查null,java时,ArrayList中的IndexOutOfBoundsException

时间:2013-01-14 18:21:18

标签: java arraylist null indexoutofboundsexception

我遇到了一个可能填充TableModel的ArrayList。 在第二个for循环中,应用程序第三次崩溃

java.lang.IndexOutOfBoundsException: Index: 14, Size: 14

if (al.get(i + 4)!=null)

我不知道为什么,因为我在这种情况下是10,所以它检查索引14,实际上是null。它应该进入else-loop,但它会崩溃。感谢您的帮助,这里是代码:

String[] teile = tabelleninhalt.split("#");
ArrayList<String> al = new ArrayList<String>();
        for (int i = 1; i < teile.length; i++) {
            al.add(teile[i]);

        }
        for (int i = 0; i < al.size(); i = i + 5) {
            if (al.get(i + 4)!=null) {
                tabModel.addRow(new Object[] { al.get(i), al.get(i + 1),
                        al.get(i + 2), al.get(i + 3), al.get(i + 4) });
            } else {
                tabModel.addRow(new Object[] { al.get(i), al.get(i + 1),
                        al.get(i + 2), al.get(i + 3) });
            }
        }

6 个答案:

答案 0 :(得分:3)

不,当大小为14时, 没有索引14.有效索引为0到13(包括0和13)。

你的循环应如下所示:

for (int i = 0; i < al.size() - 4; i += 5)

如果您的列表打算包含5个条目的批次,那么如果您的大小为14,则听起来您遇到了问题。大小不应该是5的倍数吗?

编辑:如果您想将缺少的最终值视为有效null,但仍需要前4个字段,则可能需要:

for (int i = 0; i < al.size() - 3; i += 5) {
    if (i + 4 < al.size() && al.get(i + 4) != null) {
        ... // Use al.get(i + 4)
    } else {
        ... // Don't use it
    }
}

(但很难根据一个没有提出任何要求的问题来判断。)

答案 1 :(得分:0)

索引14是ArrayList的第15个元素。与大多数编程语言一样,Java中的数组(和List s)也是零索引的。

答案 2 :(得分:0)

它不是空的,这个位置甚至不存在,这就是你得到IndexOutOfBoundsException例外的原因。

答案 3 :(得分:0)

如果您尝试访问的位置大于arraylist的大小,您将获得IOBE。您无法将该位置与null进行比较,因为该位置无法访问。请检查大小而不是null。

答案 4 :(得分:0)

听起来你的数组中只有14个项目,存储在索引0-13中。尝试访问索引14将导致异常。

答案 5 :(得分:0)

问题是索引从0开始,最后一个元素有索引13.用索引14访问它会因此抛出IndexOutOfBoundException