Java.lang.IndexOutOfBoundsException

2 respostas
A

Olá, pessoal…

Tenho uma dúvida com relação à compilação. Já tentei descobrir em todas as linhas possíveis o que está impedindo meu programa de compilar, então resolvi pedir uma ajudinha… Segue aaixo o código e a exception:

for (i = 0; i < simulador.torre.getPousos().size(); i++){ while (iterarPousos.hasNext()){ iterarPousos.next(); if(simulador.torre.getPousos().get(i).getCombustivel() == 0 && pistaPousoOcupadas < 2){ System.out.println("Entra no primeiro if"); pistaPousoOcupadas++; System.out.printf("Aviao %s pousando na pista %d\n", simulador.torre.getPousos().get(i).getIdentificacao(), pistaPousoOcupadas); iterarPousos.remove(); aeroporto.setNumeroAvioes(aeroporto.getNumeroAvioes() - 1); } else if(simulador.torre.getPousos().get(i).getCombustivel() == 0 && pistaPousoOcupadas > 2){ System.out.println("Entra no segundo if"); System.out.printf("Aviao %s desviado para Aeroporto %s\n", simulador.torre.getPousos().get(i).getIdentificacao(), simulador.aeroportos.get(i).getId()); avioesDesviados++; iterarPousos.remove(); aeroporto.setNumeroAvioes(aeroporto.getNumeroAvioes() - 1); } else if(pistaPousoOcupadas < 2){ System.out.println("Entra no terceiro if"); pistaPousoOcupadas++; System.out.printf("Aviao %s pousando na pista %d\n", simulador.torre.getPousos().get(i).getIdentificacao(), pistaPousoOcupadas); iterarPousos.remove(); aeroporto.setNumeroAvioes(aeroporto.getNumeroAvioes() - 1); } else break; } }

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.LinkedList.entry(Unknown Source) at java.util.LinkedList.get(Unknown Source) at aeroporto.Simulador.main(Simulador.java:180)

Às vezes ele entra no terceiro if (na maioria dos casos ele deve entrar neste) e imprime no máximo duas vezes, depois a exception aparece. Alguém sabe o que é?

Desde já grato!

2 Respostas

javer

Essa Exception é muito clara sobre o problema ocorrido, no seu caso significa que uma coleção qualquer (uma lista) não possui nenhum item porém você está tentando acessar a posição 0 (zero), que é a primeira posição de qualquer lista.
É esse o problema.
Verifique a linha 180 do Simulador.java

diego.urban

O seu código já está compilando… pois o erro acontece em tempo de execução.

Esse problema acontece pq você está tentando pegar o 1º elemento de uma lista porém a lista está vazia.

iterarPousos do while é o iterador da lista de pousos usado no for?
Se sim, não vejo motivo de você fazer esse while do iterarPousos se você já estará iterando na lista de pousos através do índice i no for.

Como não tenho como simular o erro aqui, creio que o problema está no uso desnecessário desse iterarPousos ai…

Pois dentro do if você da um remove do iterarPousos sendo que ele também remove da lista de pousos da torre.
Quando você sai do while, volta pro for e depois tenta pegar um pouso através do índice i, você já o excluiu dentro do while.

Tente fazer sem esse iterarPousos, somente com o for mesmo.

Criado 8 de dezembro de 2009
Ultima resposta 8 de dez. de 2009
Respostas 2
Participantes 3