Expected duplo, método de troca de No

1 resposta
G

Pessoal eu to fazendo uma lista encadeada que pega dois valores aleatorios e faz a troca entre eles. Fiz teste de mesa e ta no meu ver dando certo. Mas quando eu fui passar do papel para o computador o metodo esta dando Expected duas vezes. Não sei onde ta o erro?
Alguem pode ajudar?
Eis o codigo.

public void trocadeno(int valor1, int valor2){
	  	
	  	No tmp = primeiro;
	  	No tmp1= primeiro;
	  	
	  	while((tmp.getProx()!=null)&&(tmp.getValor()!=valor1)){
	  	  tmp = tmp.getProx();
	  	}
	  	 
	  	while((tmp1.getProx()!null)&&(tmp1.getValor()!=valor2)){
	  		tmp1 = tmp1.getProx();
	  	} 
	  	
	  	No aux = tmp.getProx();
	  	tmp.setProx(tmp1);
	  	tmp1.setProx(aux);
	  	
	  	No aux1 = tmp1.getProx();
	    tmp1.setProx(tmp);
	    tmp.setProx(aux);
	  }

Grato pela ajuda.

1 Resposta

cassio

Se os valores são aleatórios, como garantir que os mesmos existem na sua lista? você está executando isso

No aux = tmp.getProx();  
tmp.setProx(tmp1);  
tmp1.setProx(aux);  
    
No aux1 = tmp1.getProx();  
tmp1.setProx(tmp);  
tmp.setProx(aux);

sem saber se os números foram encontrados na sua lista.

Você tem que tratar as seguintes situações:

  1. Os dois números existem na lista - Troca suas posições.
  2. Um dos dois números não existe na lista - Não faz nada.

O seu código assume que sempre ocorrerá a situação 1, o que não pode ser garantido. Quando um número não existir na lista, tmp ou tmp1 serão null. Mas no seu código você sempre tenta fazer tmp.getProx(), o que irá gerar um NullPointerException caso pelo menos um dos números não for encontrado.

Faça algo assim:

public void trocadeno(int valor1, int valor2){
	  	
	  	No tmp = primeiro;
	  	No tmp1= primeiro;
	  	
	  	while((tmp.getProx()!=null)&&(tmp.getValor()!=valor1)){
	  	  tmp = tmp.getProx();
	  	}
	  	 
	  	while((tmp1.getProx()!null)&&(tmp1.getValor()!=valor2)){
	  		tmp1 = tmp1.getProx();
	  	} 
	  	
	  	
		if(tmp != null && tmp1 != null) {
			No aux = tmp.getProx();
			tmp.setProx(tmp1);
			tmp1.setProx(aux);
	  	
			No aux1 = tmp1.getProx();
			tmp1.setProx(tmp);
			tmp.setProx(aux);
		}
	  	
}

Outro detalhe importante: Se voc quer apenas trocar os valores que estão guardados nos nós, porque mudar os nós de posição? Apenas troque os números que estão dentro deles :wink:

Criado 12 de outubro de 2007
Ultima resposta 12 de out. de 2007
Respostas 1
Participantes 2