Duvida ArrayList[resolvido]

Olá a todos estou praticando um pouco de ArrayList, mais ainda não sei utiliza-lo muito bem, o projeto é bem simples, cadastro de pessoas e colocando os objetos no ArrayList e depois imprimir os elementos.
Agora um pouco de codigo:

Classe pessoa.

[code]package biblioteca.usuario;

public class Pessoa {
private String nome;
private String cpf;
private String end;
private String dataNascimento;

public Pessoa(){
}

public Pessoa(String nome,String cpf,String end,String dataNasc){
    this.nome=nome;
    this.cpf=cpf;
    this.end=end;
    this.dataNascimento=dataNasc;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public String getDataNascimento() {
    return dataNascimento;
}

public void setDataNascimento(String dataNascimento) {
    this.dataNascimento = dataNascimento;
}

public String getEnd() {
    return end;
}

public void setEnd(String end) {
    this.end = end;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public void imprimirLista(){
    System.out.println("==============================================");
    System.out.println("Nome: "+getNome());
    System.out.println("Cpf: "+getCpf());
    System.out.println("Endereço: "+getEnd());
    System.out.println("Data de Nascimento: "+getDataNascimento());
    System.out.println("==============================================");
}

}

//Main

package biblioteca;
import java.util.ArrayList;
import biblioteca.usuario.Pessoa;
public class Main {
public static void main(String[] args) {
ArrayList list= new ArrayList();
Pessoa p1=null;
Pessoa p2=null;
Pessoa p3=null;
Pessoa p4=null;
try{
p1=new Pessoa(“Willian”,“432.122.000.19”,“Rua Uva”,“18/02/2010”);
p2=new Pessoa(“Allyni”,“111.222.333.12”,“Rua Santo Tirolli”,“12/02/2011”);
p3= new Pessoa(“Watanabe”,“222.333.444-10”,“Rua KKKKK”,“13/09/1990”);
p4= new Pessoa(“Luiz”,“444.555.666-13”,“Rua limão”,“14/05/2011”);
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}catch(Exception e){
System.out.println(e);
}
}
}

[/code]

O codigo compila mais o resultado não são aquilo que eu instanciei e sim isso:

biblioteca.usuario.Pessoa@19821f
biblioteca.usuario.Pessoa@addbf1
biblioteca.usuario.Pessoa@42e816
biblioteca.usuario.Pessoa@9304b1

Agradeço

Neste código está faltando um elo.
Você está percorrendo cada objeto do ArrayList e mandando imprimir um objeto. Só que você não está chamando a função que você criou justamente para isso (para imprimir os atributos), dentro do loop.

O resultado que você está tendo é o retorno padrão do método toString() da classe java.lang.Object http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html, da qual todos os objetos em Java derivam.

Você têm duas alternativas (ou mais) para fazer isso:

1) Chamando o método que você criou para imprimir quando percorrer a lista de objetos

//Main  
  
package biblioteca;  
import java.util.ArrayList;  
import biblioteca.usuario.Pessoa;  
public class Main {  
    public static void main(String[] args) {  
        ArrayList<Pessoa> list= new ArrayList<Pessoa>();  
        Pessoa p1=null;  
        Pessoa p2=null;  
        Pessoa p3=null;  
        Pessoa p4=null;  
        try{  
            p1=new Pessoa("Willian","432.122.000.19","Rua Uva","18/02/2010");  
            p2=new Pessoa("Allyni","111.222.333.12","Rua Santo Tirolli","12/02/2011");  
            p3= new Pessoa("Watanabe","222.333.444-10","Rua KKKKK","13/09/1990");  
            p4= new Pessoa("Luiz","444.555.666-13","Rua limão","14/05/2011");  
            list.add(p1);  
            list.add(p2);  
            list.add(p3);  
            list.add(p4);  
            for(int i=0;i<list.size();i++){  
                Pessoa p = list.get(i);
                p.imprimirLista();  
            }  
       }catch(Exception e){  
            System.out.println(e);  
        }  
    }  
}  

*** OU ***

2) Sobrescrevendo o método toString() da classe Object
Desse modo, você pode colocar o objeto dentro de System.out.println() diretamente, que este chamara toString(0 e exibirá a representação do objeto em String.
Esta forma é mais recomendada para imprimir representações de objetos - dê preferência a ela sempre que possível.


public class Pessoa {

//... seu código aqui ...

public String toString() {
      return imprimirLista();
}
public String imprimirLista(){  
        StringBuilder sb = new StringBuilder();
        sb.append("==============================================\n");  
        sb.append("Nome: "+getNome() + "\n");  
        sb.append("Cpf: "+getCpf() + "\n");  
        sb.append("Endereço: "+getEnd() + "\n");  
        sb.append("Data de Nascimento: "+getDataNascimento() + "\n");  
        sb.append("==============================================\n");  
        return sb.toString();
} 

} //fim da classe Pessoa

//Main  
  
package biblioteca;  
import java.util.ArrayList;  
import biblioteca.usuario.Pessoa;  
public class Main {  
    public static void main(String[] args) {  
        ArrayList<Pessoa> list= new ArrayList<Pessoa>();  
        Pessoa p1=null;  
        Pessoa p2=null;  
        Pessoa p3=null;  
        Pessoa p4=null;  
        try{  
            p1=new Pessoa("Willian","432.122.000.19","Rua Uva","18/02/2010");  
            p2=new Pessoa("Allyni","111.222.333.12","Rua Santo Tirolli","12/02/2011");  
            p3= new Pessoa("Watanabe","222.333.444-10","Rua KKKKK","13/09/1990");  
            p4= new Pessoa("Luiz","444.555.666-13","Rua limão","14/05/2011");  
            list.add(p1);  
            list.add(p2);  
            list.add(p3);  
            list.add(p4);  
            for(int i=0;i<list.size();i++){  
                System.out.println(list.get(i));  
            }  
       }catch(Exception e){  
            System.out.println(e);  
        }  
    }  
}  

Nesse se caso voce pode fazer o seguinte:


 System.out.println(list.get(i).imprimirLista()  );  

ou seja vc vai estar chamando o metodo imprimirLista() de cada uma das instancias de Pessoa.

Outro opção é sobrescrever o metoto toString() da classe Object na sua classe Pessoa …e então vc colocaria o conteudo do metodo imprimirLista() no metodo sobrescrito, nesse caso vc poderia manter o restante do codigo igual.

Exemplo:


public class Pessoa { 

public String toString(){

       System.out.println("==============================================");  
        System.out.println("Nome: "+getNome());  
        System.out.println("Cpf: "+getCpf());  
        System.out.println("Endereço: "+getEnd());  
        System.out.println("Data de Nascimento: "+getDataNascimento());  
        System.out.println("==============================================");  
		
}

}

Oq estava sendo impresso nada mais é do que o endereço de memoria do objeto.

Voce faz como o colega ai de cima falou sobrescreve o método toString da sua classe.

valeu diego_qmota funciono ^^ , mais me apareceu mais uma duvida, digamos que eu não tenha feito esse metodo imprimirLista(), quando eu pedi-se para retorna o objeto, oque ele retornaria?? e sempre devo utilizar o toString() de Object para concatenar o resultado??? é que na verdade eu não conheço muitas Collections.

so complementando; você ja disse que esta inciando; mas, tente ser sempre o mais “generico” possivel; como declarar com a referencia do seu array list; a interface Collection; como

Collection<Pessoa> list = new ArrayList<Pessoa>();

Ele retornaria a referência daquele objeto. Nunca o objeto em si. Que isso fique bem claro!

Por trás dos panos, quando você dá System.out.println() em uma referência de um objeto, a classe PrintStream chama automaticamente o método toString() herdado da classe Object (se não for sobreescrito)… E isso fará com que você tenha, no seu output o nome da classe do objeto seguido do hashcode do mesmo, que funciona como um jeito de identificar o objeto na referência. Ex.: Cliente@34f5d74a. Neste caso, você pode interpretar da seguinte maneira: “Uma variável c se refere ao objeto com hashcode 34f5d74a do tipo Cliente”. Não vou me aprofundar nesse assunto, pois quero apenas que saiba como funciona.

Por isso, é fortemente recomendado que você reescreva o método toString(), pois é ele que será chamado sempre quando você tentar imprimir um objeto. E é por isso que o melhor jeito de resolver isso é uma das duas opções do diego_qmota.

Valeu!

Bom eu entendi como funciona e tudo, mais eu poderia armazenar ex:list.add(p1.imprimirLista),já instaciei os objetos e gostaria apenas de adicionar as coisas neles salvos na lista(como eu disse uma especie de cadastro), isto tbm funcionaria???, já que ele não vai retornar os valores do objeto, mais sim a referência.

Você não pode fazer list.add(p1.imprimirLista) porque list é um ArrayList e só recebe referências do tipo Pessoa e o seu método imprimeLista() retorna uma String. Portanto vai dar conflito de tipos (não me recordo agora o nome da exception).

O que eu recomendo seria do jeito que você estava fazendo: preencha um objeto Pessoa e armazene o mesmo preenchido no ArrayList. Quando precisar fazer uma consulta, é só recuperar o objeto que você desejar e obter os dados apartir dele.

Não sei se respondi sua pergunta pois não a compreendi muito bem, mas o pouco que eu compreendi (eu acho) estou tentando lhe esclarecer… =)

Finalmente entedi ^^ muito obrigado.

O problema, é que vc esta fazendo um for mais não esta chamando o metodo de impressão, e seu método de impreção não tem um tipo de retorno, Você tem que reemplementar o método toString retornando os dados do array.