-2

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

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

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

我不知道为什么,因为在这种情况下 i 是 10,所以它检查索引 14,它实际上是空的。它应该进入 else 循环,但它却崩溃了。感谢您的帮助,代码如下:

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) });
            }
        }
4

6 回答 6

3

不,当大小为 14 时,没有索引 14。有效索引为 0 到 13(含)。

您的循环应如下所示:

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

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

编辑:如果您想将缺失的最终值视为有效地为空,但仍需要前 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
    }
}

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

于 2013-01-14T18:23:16.243 回答
0

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

于 2013-01-14T18:23:43.040 回答
0

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

于 2013-01-14T18:24:06.650 回答
0

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

于 2013-01-14T18:24:28.457 回答
0

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

于 2013-01-14T18:25:06.430 回答
0

问题是索引从 0 开始,最后一个元素的索引为 13。因此使用索引 14 访问它会引发 IndexOutOfBoundException

于 2013-01-14T18:25:07.083 回答