0

小さな問題が発生しました java.lang.IndexOutOfBoundsException: Index: 29, Size: 29 を起動すると、この 1 つのコード エラーが発生しましたがif ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd"))、インデックスが 29 ではなく 30 であるべき理由がわかりません。

for (int y = 0; y < harm.size(); y++) {//wiersze
            c1 = new PdfPCell(new Phrase(harm.get(y).nazwa, stdFont));
            c1.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(c1);
            c1 = new PdfPCell(new Phrase("" + harm.get(y).getSumaGodzin() + " / " + harm.get(y).normaGodzin, smallFont));
            c1.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(c1);
            for (int x = 0; x < harm.get(y).dni.size(); x++) {//kolumny
                c1 = new PdfPCell(new Phrase(harm.get(y).dni.get(x).godziny, smallFont));
                //dla swiąt ustal kolor tła na czerwono
                //dla niedziel ustala kolor tla na czerwony
                if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) {
                    c1.setBackgroundColor(BaseColor.RED);
                }
4

3 に答える 3

3

Java (および他の多くのプログラミング言語) では、インデックスは 1 ではなく 0 から始まります。

これは、サイズが 29 の場合、最後の有効なインデックスは 29 ではなく 28 であることを意味します。

于 2012-03-10T00:28:23.863 に答える
1

harm.get(y).dni のすべての要素をループしているように見え、ループ内で実行しているようです

if ((listaSwiat != null && listaSwiat.get(x) != null) 
|| harm.get(y).getDzienTygodnia(x + 1).equals("Nd"))

前回のループでは x = 28 で、サイズは 29 です。

harm.get(y).getDzienTygodnia(x + 1)

したがって、他の回答と同様に、インデックスは 1 ではなく 0 から始まるため、範囲外のスポット 29 で要素を取得します。次のインデックスをチェックする前に、現在最後のインデックスにいるかどうかを確認するために、ここにチェックを追加する必要があります。 .

于 2012-03-10T00:31:47.807 に答える
0

例外の原因となっている行を分割して、どの呼び出しgetが失敗しているかを正確に確認できるようにします。

boolean listaSwiatCheck = listaSwiat != null && listaSwiat.get(x) != null;
if (listaSwiatCheck || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) {
    c1.setBackgroundColor(BaseColor.RED);
}
于 2012-03-10T00:49:28.330 に答える