Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

msr

Dúvida com LinkedList

Recommended Posts

msr

Olá,

Tenho um Individuo a mover-se numa grelha e guardo o registo do caminho que esse Individuo segue nessa grelha. Estou a guardar esse caminho numa LinkedList (uma lista de objectos do tipo Ponto).

Quando esse individuo passa por um ponto em que já esteve,  o resto do caminho é removido. Por exemplo:

Mover para: (1,1) -> caminho {(1,1)}

Mover para: (1,2) -> caminho {(1,1) (1,2)}

Mover para: (1,3) -> caminho {(1,1) (1,2) (1,3)}

Mover para: (1,2) -> caminho {(1,1) (1,2)}

Para isso estou a fazer o seguinte. Para saber a partir de que ponto o individuo se vai mover, faço:

Ponto ultimoPonto = this.caminho.getLast();

Depois de decidir o próximo ponto para onde se vai mover faço:

Ponto proxPonto = aresta.getProxPonto(ultimoPonto); // uma aresta une dois pontos adjacentes

System.out.println("Ponto onde estou: " + ultimoPonto + "  Mover para: " + proxPonto);
this.adicionaPonto(proxPonto);

Sendo que o método adicionaPonto está definido assim:

	public void adicionaPonto(Ponto p){

	LinkedList<Ponto> caminho_aux = new LinkedList<Ponto>();

	ListIterator<Ponto> it = this.caminho.listIterator();
	while(it.hasNext()){
		Ponto p_aux = it.next();

		if(!p_aux.equals(p)){
			caminho_aux.add(p_aux);
		}
		else{
			break;
		}
	}

	caminho_aux.add(p);
	this.caminho = caminho_aux;

	System.out.println("Caminho: " + this.caminho);

}

No entanto com isto não estou a obter o resultado esperado:

Caminho: [(1,1)]

Ponto onde estou: (1,1)  Mover para: (1,2)

Caminho: [(1,1), (1,2)]

Ponto onde estou: (1,2)  Mover para: (1,3)

Caminho: [(1,1), (1,2), (1,3)]

Ponto onde estou: (1,3)  Mover para: (1,2)

Caminho: [(1,1), (1,2)] // CERTO !

Ponto onde estou: (1,3)  Mover para: (2,3) // ERRADO!

Caminho: [(1,1), (1,2), (1,3), (2,3)]

Caminho: [(1,1)]

Ponto onde estou: (1,1)  Mover para: (1,2)

Caminho: [(1,1), (1,2)]

Ponto onde estou: (1,2)  Mover para: (1,3)

Caminho: [(1,1), (1,2), (1,3)]

Ponto onde estou: (1,2)  Mover para: (1,3) // ERRADO!

Caminho: [(1,1), (1,2), (1,3)]

Eu suponho que a falha esteja no metodo adicionaPonto mas não estou a ver onde. Alguma sugestão?

Se eu fizesse um simples this.caminho.add(p); isto funcionava bem (a nivel de movimentos).

Obrigado

Share this post


Link to post
Share on other sites
Rui Carlos

Parece-me que o erro acontece quando vais buscar o último ponto.

Tenta imprimir a lista antes de chamares o getLast e vê se tens a lista correcta.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.