IndexOutofBoundException por quê?
-
10-12-2019 - |
Pergunta
Eu tenho o pequeno problema que eu tenho de erro de java.lang.IndexOutOfBoundsException:Índice:29, Tamanho:29 quando eu lançar este código de erro está em linha if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd"))
mas não sei qual índice deve ser de 30 não 29 any1 pode ajudar?
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);
}
Solução
Parece que você está loop através de todos os elementos do mal.get(y).dni e dentro do loop você fazer
if ((listaSwiat != null && listaSwiat.get(x) != null)
|| harm.get(y).getDzienTygodnia(x + 1).equals("Nd"))
A última vez que o loop x = 28 e o tamanho é de 29.Mas você
harm.get(y).getDzienTygodnia(x + 1)
Assim, você obtém o elemento do ponto 29, que está fora de limites, porque, como a outra resposta, afirmou o índice começa em 0 e não 1.Você precisa adicionar um cheque aqui para ver se você está na última índice antes de conferir o próximo índice.
Outras dicas
Em Java (e muitas outras linguagens de programação), os índices começam em zero, e não um.
Isso significa que, se o tamanho é de 29, o último índice válido é de 28 anos, não 29.
Quebrar a linha que faz com que a exceção para que você possa ver exatamente o que chamar a get
está a falhar.
boolean listaSwiatCheck = listaSwiat != null && listaSwiat.get(x) != null;
if (listaSwiatCheck || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) {
c1.setBackgroundColor(BaseColor.RED);
}