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);
                }
Foi útil?

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top