IndexOutofBoundException почему? - PullRequest
       3

IndexOutofBoundException почему?

0 голосов
/ 10 марта 2012

У меня небольшая проблема, у меня ошибка java.lang.IndexOutOfBoundsException: Index: 29, Size: 29, когда я запускаю эту одну ошибку кода в строке if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) но не знаю, почему индекс должен быть 30, а не 29 any1 может помочь? 1002 *

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

Ответы [ 3 ]

3 голосов
/ 10 марта 2012

В Java (и многих других языках программирования) индексы начинаются с нуля, а не с одного.

Это означает, что, если размер равен 29, последний действительный индекс будет 28, а не 29.

1 голос
/ 10 марта 2012

Похоже, что вы зацикливаетесь на всех элементах вреда. Y (y) .dni и внутри цикла, который вы делаете

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

В последний раз в цикле х = 28 и размер29. Но вы делаете

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

Таким образом, вы получаете элемент в точке 29, который находится за пределами, потому что, как и в другом ответе, указанном, индекс начинается с 0, а не с 1. Вы должны добавить проверку здесьпрежде чем проверять следующий индекс, проверьте, есть ли у вас последний индекс.

0 голосов
/ 10 марта 2012

Разбейте строку, которая вызывает исключение, чтобы вы могли точно определить, какой вызов get не удался.

boolean listaSwiatCheck = listaSwiat != null && listaSwiat.get(x) != null;
if (listaSwiatCheck || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) {
    c1.setBackgroundColor(BaseColor.RED);
}
...