Lista encadeada

5 respostas
oxfish

Pessoal, estou lendo um código de um aplicativo de lista encadeada, e estou com uma dúvida na parte de inserir no início. É que o método inserirInicio() aparece duas vezes, como mostrado abaixo:

public void inserirInicio(No novo){
		novo.setProx(getInicio());
		setInicio(novo);
			
	}
	public void inserirInicio(int valor){
		
		No novo = new No();
		novo.setValor(valor);
		novo.setProx(getInicio());
		setInicio(novo);
			
	}
alguém saberia me dizer pq este método aparece duas vezes?? Comentei o primeiro e o programa não rodou....Se alguém puder me ajudar......Valew!

5 Respostas

M

Bom,

Esse eh um caso de reescrita de metodo, existem duas implementacoes para o metodo inserirInicio, uma com um parametro No e outra com um parametro inteiro.
Isso e permitido em Java, criar metodos com o mesmo nome e com a lista de parametros diferentes. Quando vc chamar o metodo passando um No como parametro, o programa vai rodar o primeiro metodo que so insere o No no inicio, caso passe um inteiro, ele vai chamar o segundo que cria um No e insere…

Espero ter ajudado…

oxfish

Certo,

Já começou a clarear um pouco a idéia. Porém dê uma olhada no método inserirInicio():

No n;
          inserirInicio(n = new  No(preenche()));
Note que no parâmetro dele é passado um valor do tipo No e preenche(), que é um método que retorna um valor como mostrado abaixo:
public static int preenche(){
	
return Integer.parseInt(JOptionPane.showInputDialog("Valor"));
	}
Isto tudo me parece um pouco confuso, seria possível simplificar o que realmente acontece quando o inserirInicio é chamado??? Obrigado mais uma vez!
Dieval_Guizelini

A técnica de ter vários métodos com o mesmo nome e parâmetros diferentes chama-se “overload” ou sobrecarga e não deve ser confundido com reescrita ou override.

veja estes link, são interessantes:

:arrow: tutorial da SUN
http://java.sun.com/docs/books/tutorial/java/javaOO/methods.html

:arrow: Forum da SUN
http://forum.java.sun.com/thread.jspa?threadID=495629&messageID=2338444

:arrow: Um bom conselho para evitar overload:
http://www.javapractices.com/Topic119.cjp

No livro do Joshua Block - Effective Java: Programming Language Guide - faz uma boa discussão de quando vale a pena realizar o overload e chama a atenção para o problema que você passou (o código pode ficar obscuro).

  1. fw
Dieval_Guizelini
oxfish:
Certo,

Já começou a clarear um pouco a idéia. Porém dê uma olhada no método inserirInicio():

No n;
          inserirInicio(n = new  No(preenche()));
Note que no parâmetro dele é passado um valor do tipo No e preenche(), que é um método que retorna um valor como mostrado abaixo:
public static int preenche(){
	
return Integer.parseInt(JOptionPane.showInputDialog("Valor"));
	}
Isto tudo me parece um pouco confuso, seria possível simplificar o que realmente acontece quando o inserirInicio é chamado??? Obrigado mais uma vez!

Amigo, fazendo o teste de mesa você irá compreender a execução.

Primeiro resolvemos a parte mais interna dos parênteses:

executamos o método preenche que é static e não precisa de uma instância para ser executado. Ele abre uma janela e espera uma leitura de um valor (ótimo forma de produzir erros na aplicação inclusive).
Ele retorna um valor primitivo do tipo int (Integer.parseInt converte o retorno de showIputDialog que é uma String para um valor inteiro).

é chamado o contrutor da classe No passando o valor inteiro.

Depois e chamado o método inserirInicio( passando um objeto No )

onde está a sua dúvida então?

fw

oxfish

Dúvida??? q dúvida??? você acabou de esclarecer… muito bom…valew… na verdade eu só precisava relembrar…brigadão mesmo.!!!

Criado 29 de abril de 2007
Ultima resposta 29 de abr. de 2007
Respostas 5
Participantes 3