-2

TableModel を満たすはずの ArrayList に問題があります。2 回目の for ループで、アプリが 3 回目にクラッシュします。

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

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

この場合の i は 10 なので、インデックス 14 をチェックしますが、これは実際には null です。それは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 の倍数であるべきではありませんか?

編集: 欠落している最終値を事実上 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
    }
}

(しかし、要件を何も与えていない質問に基づいて判断するのは困難です。)

于 2013-01-14T18:23:16.243 に答える
0

インデックス 14 は、 の 15 番目の要素ですArrayList。ほとんどのプログラミング言語と同様Listに、Java の配列 (および s) はインデックスがゼロです。

于 2013-01-14T18:23:43.040 に答える
0

null ではありません。その位置は存在しません。そのため、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 に答える