Вопрос

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

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);
                }
Это было полезно?

Решение

Похоже, вы зацикливаете все элементы вреда.

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

Последний раз в цикле x = 28 и размер 29.Но ты делаешь

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

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

Другие советы

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

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

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

boolean listaSwiatCheck = listaSwiat != null && listaSwiat.get(x) != null;
if (listaSwiatCheck || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) {
    c1.setBackgroundColor(BaseColor.RED);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top