IndexOutofBoundException, почему?
-
10-12-2019 - |
Вопрос
У меня небольшая проблема: ошибка 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);
}