Erro: Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0?

2 respostas
A

Estou com um problema que é o seguinte: Meu código começa a rodar e de repente aparece a seguinte mensagem:

Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

at java.util.ArrayList.rangeCheck(ArrayList.java:653)

at java.util.ArrayList.get(ArrayList.java:429)

at ag_pmpc.AG_PMPC_Atendido_Capacidade.Soma_demandas(AG_PMPC_Atendido_Capacidade.java:174)

at ag_pmpc.AG_PMPC_Atendido_Capacidade.atendido_capacidade(AG_PMPC_Atendido_Capacidade.java:122)

at ag_pmpc.AG_PMPC_Principal.ag(AG_PMPC_Principal.java:186)

at ag_pmpc.AG_PMPC.main(AG_PMPC.java:17)

O erro apontado está dentro desse for, no if ( if(individuo_capacitado.get(j) == med ) { )

Segue parte do código:

for (int i=0; i < aux_numero_medianas; i++){
        med = aux_medianas.get(i); // variável med recebe a mediana.
        soma_demanda =0; 
            
        for (int j=0; j < aux_tamanho_instancia; j++){
            
            if(individuo_capacitado.get(j) == med ){

                soma_demanda = soma_demanda + aux_demandas.get(j);
            }
            else{
               // continue;
            }
        }

2 Respostas

staroski

O Index: 0, Size: 0 significa que você está tentando acessar a posição 0 de uma lista vazia.

Acredito que seu laço está errado, faça assim:

int tamanho = individuo_capacitado.size(); // variavel local com tamanho da lista
    for (int j = 0; j < tamanho; j++){
        int valor = individuo_capacitado.get(j); // evite chamar o mesmo método varias vezes, use variavel local
        if (valor == med ){
            soma_demanda = soma_demanda + valor;
        } // neste caso não precisa de else
    }
A

Beleza staroski, deu certo!

Muito obrigado!

Ogora, tenho que gerar 80 indivíduo_capacitados e armazená-los no ArrayList populacao_inicial - ArrayList populacao_inicial= new ArrayList<>(); -

Entretanto, quando o individuo é introduzido na populacao_inicial, ele sobrepõe os demais que já estão lá dentro, ou seja, quando chega ao final os 80 indivíduos estão todos iguais.

public class AG_PMPC_Pop_Inicial {

public static ArrayList AG_populacao_inicial(int tamanho_instancia, int

numero_medianas, int[]demanda, int[]coord_x, int []coord_y,ArrayList<ArrayList>

matriz,int[]capacidade, int tamanho_populacao){//, int [] demanda, int[] coord_x, int []coord_y, int capacidade){

float fo_Individuo= 0;
int criterio_parada = 0;
    ArrayList<ArrayList> populacao_inicial= new ArrayList<>();
        while(criterio_parada < tamanho_populacao){
            ArrayList<Integer> Individuo = new ArrayList<>(tamanho_instancia);
            Individuo = AG_PMPC_Gera_Individuos_Aleatorios.gera_individuo(tamanho_instancia, 
             numero_medianas, demanda, matriz, capacidade);
            fo_Individuo = AG_PMPC_Avalia_fo.avalia(Individuo, tamanho_instancia, matriz);
            populacao_inicial.add(Individuo);
            criterio_parada++;
    }
    return populacao_inicial;
}

}

Você pode me ajudar em mais essa?

Obrigado!

Criado 20 de julho de 2017
Ultima resposta 21 de jul. de 2017
Respostas 2
Participantes 2