Pessoal.
public ArrayList<Integer> buscaMenorCaminho()
{
ArrayList<Integer> buscaMenorCaminhoAL = new ArrayList<Integer>();
int menor = distancia;
int PontoA, PontoB, pontoDistanciaAB;
buscaMenorCaminhoAL.add(null);
buscaMenorCaminhoAL.add(null);
buscaMenorCaminhoAL.add(null);
buscaMenorCaminhoAL.add(null);
for (int i = 0; i < this.menorCaminhoAL().size(); i++)
{
pontoA = this.menorCaminhoAL().get(i);
pontoB = this.menorCaminhoAL().get(i+1);
pontoDistanciaAB = this.menorCaminhoAL().get(i+2);
ArrayList<Integer> buscaDistancia = this.buscaDistancia(pontoB, this.pontoA);
int a = buscaDistancia.get(0);
int b = buscaDistancia.get(1);
int c = buscaDistancia.get(2);
if( pontoDistanciaAB + c < menor )
{
if(buscaMenorCaminhoAL.size() == 2)
{
buscaMenorCaminhoAL.add(null);
buscaMenorCaminhoAL.add(null);
}
menor = pontoDistanciaAB + c;
buscaMenorCaminhoAL.set(0, pontoA);
buscaMenorCaminhoAL.set(1, pontoB);
buscaMenorCaminhoAL.set(2, a);
buscaMenorCaminhoAL.set(3, b);
}
else
{
buscaMenorCaminhoAL.set(0, this.pontoA);
buscaMenorCaminhoAL.set(1, this.pontoB);
if (buscaMenorCaminhoAL.size() > 2)
{
buscaMenorCaminhoAL.remove(2);
buscaMenorCaminhoAL.remove(3);
}
}
i = i + 2;
}
return buscaMenorCaminhoAL;
}
A ideia aqui é se pontoDistanciaAB + c for menor que a variável menor, eu preciso set{ar} (configurar) o valor dos índices 0, 1, 2 e 3 do ArrayList . Porem, esses índices ainda não foram criados.
E se pontoDistanciaAB + c for maior ou igual a varável a, preciso set{ar} apenas os índices 0 e 1. E no caso remover os índices 3 e 4.
Isso em uma volta do loop.
Para a próxima volta, Pode acontecer que os indices 0 e 1 no primeiro if já tenham sido criados mas os índices 2 e 3 ainda não;.
No final, o ArrayList retorno só poderá ter no máximo 4 posições.
Como resolver esses problemas?
Erro:
C:\java\AD2>java Principal
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.remove(Unknown Source)
at MenorCaminho.buscaMenorCaminho(MenorCaminho.java:100)
at Principal.main(Principal.java:44)
C:\java\AD2>