DÚVIDAS LinkedList

9 respostas
FelipeGeorge13

pessoal, estou com muita dúvida ao implementar uma agenda telefonica(nome e elefone) em um LinkedList...
por exemplo segue meu codigo...

import javax.swing.*;
import java.util.*;

class DadosPessoais{
    private String nome;
    private int telefone;
    
    public DadosPessoais(){
        this.nome = "";
        this.telefone = 0; 
    }
    
    public DadosPessoais(String texto, int num){
        this.nome = texto;
        this.telefone = num; 
    }
        
    public DadosPessoais(String texto){
        this.nome = texto;
    }
    
    public DadosPessoais(int num){
        this.telefone = num;
    }
    
    public void entraNome(String texto){
        this.nome = texto;
    }
    
    public void entreTelefone(int tel){
        this.telefone = tel;
    }
    
    public String mostraNome(){
        return this.nome;
    }
    
    public int mostraTelefone(){
        return this.telefone;
    }
}

public class ListaAgenda{
    private LinkedList lista = new LinkedList();
    
    public void recebePessoa(DadosPessoais p){
        this.lista.add(p);
    }
    
    public void mostraLista(){
        System.out.println(this.lista);
    }
                
    public static void main(String arg[]){
        DadosPessoais pessoa = new DadosPessoais("Felipe", 1313);
        ListaAgenda agenda = new ListaAgenda();
        
        agenda.recebePessoa(pessoa);
        
        agenda.mostraLista();
        
    }
}

até ai tudo bem , na compilacao num da nenhum erro...
mas quando executa,
VEJAM SÒ O RESULTADO:
run-single:
[DadosPessoais@19821f]
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)

POR FAVOR ME AJUDEM...!

9 Respostas

V

Ola, segue as alteracoes.

private LinkedList<DadosPessoais> lista = new LinkedList<DadosPessoais>();

public void mostraLista() {

  for (DadosPessoais p : lista) {
    System.out.println(lista.mostraNome());
  }

}
dionat4n

Implementa um método toString():

class DadosPessoais{
    private String nome;
    private int telefone;
    
    public DadosPessoais(){
        this.nome = "";
        this.telefone = 0; 
    }
    
    public String toString() {
    	return "Nome: " + this.nome + ", Telefone: " + this.telefone;
    }
...

para saber o que é para imprimir, senão por padrão é impresso o nome da classe do objeto e o endereço dele.

Ok?

FelipeGeorge13

vejam só este codigo:

import java.util.*;
import javax.swing.*;

public class ListaDadosPessoais{
    public static void main(String arg[]){
        LinkedList lista = new LinkedList();
        
        lista.add(new Integer(10));
        lista.add(new Integer(20));
        lista.add(new Integer(30));
        lista.add(new Integer(40));
        lista.add(new Integer(50));
        lista.add(new Integer(60));
        lista.add(new Integer(70));
        lista.add(new Integer(80));
        lista.add(new Integer(90));
        lista.add(new Integer(100));
        lista.add(new Integer(110));
        lista.add(new Integer(120));
        
        System.out.println(lista.size());  //imprime 12
        
        for(int i=0; i<lista.size(); i++){
            System.out.println(lista.remove());
        }
    }
}

este codigo só imprime metade da lista, se for 6 elementos imprime 3, se for 20 imprime 10...
Alguem pode me dizer pq isso acontece???>

dionat4n

É pq quando você remove da lista, atualiza o tamanho dela.
Tem que percorrer a lista ao contrário para isso não acontecer!

FelipeGeorge13

dionat4n:
É pq quando você remove da lista, atualiza o tamanho dela.
Tem que percorrer a lista ao contrário para isso não acontecer!

vlws…!

FelipeGeorge13

aqui... eu fiz desse jeito mas está imprimindo sempre o ultimo elemento...

public class ListaDadosPessoais{
    private LinkedList<DadosPessoais> lista = new LinkedList<DadosPessoais>();
    
    public void insereLista(DadosPessoais p){
        lista.add(p);
    }
    
    public void mostraLista(int i){
        System.out.println("Nome: " +lista.get(i).mostraNome());
        System.out.println("Telefone: " +lista.get(i).mostraTelefone());
    }
    
    public static void main(String arg[]){
        DadosPessoais pessoa = new DadosPessoais();
        ListaDadosPessoais dados = new ListaDadosPessoais();        
        int i=0;
        
        pessoa.recebeNome("ab");
        pessoa.recebeTelefone(12);
        dados.insereLista(pessoa);
        
        pessoa.recebeNome("bc");
        pessoa.recebeTelefone(45);
        dados.insereLista(pessoa);
        
        pessoa.recebeNome("fg");
        pessoa.recebeTelefone(78);
        dados.insereLista(pessoa);
        
        pessoa.recebeNome("de");
        pessoa.recebeTelefone(848);
        dados.insereLista(pessoa);
        
        pessoa.recebeNome("gfgf");
        pessoa.recebeTelefone(5456);
        dados.insereLista(pessoa);
        
        pessoa.recebeNome("hgjg");
        pessoa.recebeTelefone(42151);
        dados.insereLista(pessoa);
        
        System.out.println(dados.lista.size()); //aqui imprime 6
        
        
        while(i<dados.lista.size()){ //neste laço imprime os 6 elemento
            dados.mostraLista(i);     //porem é o ultimo 6vezes!
            i++;
        }
       
        
    }
}
>
dionat4n

Tem que criar novos objetos a cada vez que for adicionados novas pessoas e novos dados:

DadosPessoais pessoa = new DadosPessoais();  
         ListaDadosPessoais dados = new ListaDadosPessoais();          
         int i=0;  
           
         pessoa.recebeNome("ab");  
         pessoa.recebeTelefone(12);  
         dados.insereLista(pessoa);  
         
         pessoa = new DadosPessoais();      //cria uma nova pessoa
         dados = new ListaDadosPessoais(); //cria um novo dado

         pessoa.recebeNome("bc");  
         pessoa.recebeTelefone(45);  
         dados.insereLista(pessoa);

Senão tu sempre vai referenciar a mesma Pessoa com os mesmos Dados dela.

:wink:

FelipeGeorge13

dionat4n:

Tem que criar novos objetos a cada vez que for adicionados novas pessoas e novos dados:

DadosPessoais pessoa = new DadosPessoais();  
         ListaDadosPessoais dados = new ListaDadosPessoais();          
         int i=0;  
           
         pessoa.recebeNome("ab");  
         pessoa.recebeTelefone(12);  
         dados.insereLista(pessoa);  
         
         pessoa = new DadosPessoais();      //cria uma nova pessoa
         dados = new ListaDadosPessoais(); //cria um novo dado

         pessoa.recebeNome("bc");  
         pessoa.recebeTelefone(45);  
         dados.insereLista(pessoa);

Senão tu sempre vai referenciar a mesma Pessoa com os mesmos Dados dela.

:wink:

vlws brother…

dionat4n

FelipeGeorge13:
dionat4n:

Tem que criar novos objetos a cada vez que for adicionados novas pessoas e novos dados:

DadosPessoais pessoa = new DadosPessoais();  
         ListaDadosPessoais dados = new ListaDadosPessoais();          
         int i=0;  
           
         pessoa.recebeNome("ab");  
         pessoa.recebeTelefone(12);  
         dados.insereLista(pessoa);  
         
         pessoa = new DadosPessoais();      //cria uma nova pessoa
         dados = new ListaDadosPessoais(); //cria um novo dado

         pessoa.recebeNome("bc");  
         pessoa.recebeTelefone(45);  
         dados.insereLista(pessoa);

Senão tu sempre vai referenciar a mesma Pessoa com os mesmos Dados dela.

:wink:

vlws brother…

Me deve um lanche! haeuhaeue

Criado 14 de junho de 2008
Ultima resposta 17 de jun. de 2008
Respostas 9
Participantes 3