Arraylist

Boa tarde Galera

Vou colocar pedaço do meu codigo, estou usando POO

while (!opcao.equals("")) {

	
System.out.print("Digite seu nome: ");
p1.setNome( scn.nextLine());


System.out.print("Digite seu telefone: ");
p1.setTelefone( scn.nextLine());

System.out.print("Digite seu email: ");
p1.setEmail( scn.nextLine());

//dados.add(new Pessoa(nome,telefone,email));

System.out.print("deseja continuar...1-sim | 2-nao: ");
opcao = scn.nextLine();

dao.adiciona(p1);

if(opcao.equals("2")) {
		

	break;
}

}//termina o while

dao.exibirListaPessoa();

Tenho um sistema onde insiro “n” pessoas no arraylist e quando o usuario sai do sistema ele precisa exibir todos todas as pessoas cadastradas no sistema,
minha dúvida é por que o último registro está repetindo “n” equivalente a quantidade de pessoas inseridas, por que isso ? o que estou fazendo de errado ? por que está repetindo o ultimo registro ?

1 - Insira seu código entre as tags
2 - Poste todo o código relevante, pelo que você postou, eu não tenho como saber o que acontece, pois não vejo a implementação do dao.


package sebo.dao;

import java.util.ArrayList;
import java.util.List;

import sebo.model.Pessoa;

public class PessoaDAO {
	
	List<Pessoa> lista = new ArrayList<Pessoa>();
	
	public void adiciona(Pessoa pessoa){
		lista.add(pessoa);
	}
	
	public void exibirListaPessoa(){
		System.out.println(lista.toString());
	}
	
	public void removerPessoa(Pessoa pessoa) {
		 lista.remove(pessoa);
	} 
	
	public void quantidadePessoasCadastradas(){
		System.out.println(lista.size());
	}
	
}

package sebo.model;

public class Pessoa {
	
	private String nome;
	private String telefone;
	private String email;
	
	//get e set
	
	public Pessoa(){
		
	}
	
	public Pessoa(String nome, String telefone, String email) {
		super();
		this.nome = nome;
		this.telefone = telefone;
		this.email = email;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	@Override
	public String toString() {
		return nome + " " + telefone + " " + email;
	}

}

package sebo.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Scanner;

import sebo.dao.PessoaDAO;
import sebo.model.Pessoa;

public class PessoaIncluirDenovo {
	
public static void main(String[] args) {
	
	Scanner scn = new Scanner(System.in);
	String nome = " ";
	String telefone = " ";
	String email = " ";
	String opcao = " ";
	//opcao = scn.nextLine();
	//List<Pessoa> dados = new ArrayList<Pessoa>();
	
	Pessoa p1 = new Pessoa();
	//Pessoa p2 = new Pessoa();
	PessoaDAO dao = new PessoaDAO();
	
	
	
	
	while (!opcao.equals("")) {

		
	System.out.print("Digite seu nome: ");
	p1.setNome( scn.nextLine());
	
	
	System.out.print("Digite seu telefone: ");
	p1.setTelefone( scn.nextLine());
	
	System.out.print("Digite seu email: ");
	p1.setEmail( scn.nextLine());
	
	//dados.add(new Pessoa(nome,telefone,email));
	
	System.out.print("deseja continuar...1-sim | 2-nao: ");
	opcao = scn.nextLine();
	
	dao.adiciona(p1);
	
	if(opcao.equals("2")) {
		
	//for (Pessoa pessoa : dados) 
	//{
	//	System.out.println("Nome:" + pessoa.getNome());
	//}
	//PessoaDAO dao = new PessoaDAO();
		
		
	
		break;
	}
	
//scn.nextLine();	
} 
	dao.exibirListaPessoa();
/*

//vamos add 2 pessoas na lista
Pessoa p1 = new Pessoa();
Pessoa p2 = new Pessoa();
PessoaDAO dao = new PessoaDAO();
p1.setNome("Joaquim");
p1.setEmail("joaquim@hotmail.com");
p1.setTelefone("12345678"); 
p2.setNome("Maria");
p2.setEmail("maria@hotmail.com");
p2.setTelefone("45980128"); 
//adicionar objeto na lista
dao.adiciona(p1);
dao.adiciona(p2);
//exibe dados
System.out.println("Lista");
dao.exibirListaPessoa();
//Exibir a quantidade de elementos cadastrados
dao.quantidadePessoasCadastradas();
//exibir valore s do get
System.out.println("\n--------Valores do get---------");
System.out.println("Nome:" + p1.getNome());
System.out.println("Email:" + p1.getEmail());
System.out.println("Telefone:" + p1.getTelefone());
System.out.println("Nome:" + p2.getNome());
System.out.println("Email:" + p2.getEmail());
System.out.println("Telefone:" + p2.getTelefone());
*/
}
}

OK, Agora tente explicar melhor seu problema, não consegui entender.

Como assim o último registro está repetindo?

Por exemplo digaoneves se eu inserir duas pessoas no arraylist a ultima pessoa vai repetir duas vezes e se inserir três pessoas a ultima pessoas repetir três vezes…não sei onde estou errando.
Estava dando uma fuçada no forum e percebe que tem um cara que passou pelo mesmo problema http://www.guj.com.br/java/259304-resolvido-imprimir-um-arraylist-de-um-objeto porem não entende como ele resolveu :slight_smile:

tente instanciar o objeto novamente a cada iteração do while, para ter uma nova referência.

Então digaoneves já coloquei ele também dentro do while e continua repetindo…o ultimo registro inserido.

Agora quando criu os registro manual, inclusive cheguei a comentar ai da certo, só que o usuario precisa inserir quantos registros ele quiser rs

Você chegou a utilizar algum depurador? Pra ver se ele sai do while na hora correta? Ver quantas vezes ele adiciona itens na lista, etc.

não, ainda não cheguei a fazer isso :frowning:

digaoneves estava vendo aqui acho que sei qual o problema rs se você perceber na classe PessoaDAO eu crio uma lista do tipo arraylist veja

List lista = new ArrayList();

Acho que o certo é

List lista = new List();

Assim que chegar em casa vou testar para ver se vai continuar repetindo, por enquanto obrigado :slight_smile:

Não… esse não é o correto, você não consegue dar um new List, porque List é uma interface e não uma classe concreta, o seu erro não está aí.

Depois que vc fizer isto:

dao.adiciona(p1);

faça isso:

p1 = new Pessoa();

vai resolver teu problema…

[quote=AlexandreTLazaro]Depois que vc fizer isto:

dao.adiciona(p1);

faça isso:

p1 = new Pessoa();

vai resolver teu problema…[/quote]
Sua sugestão não é a mesma que a minha ?

eu nem vi suas sugestões, eu soh li o problema dele e respondi.

valeu galera farei isso, mas dai coloco o dao.exibirListaPessoa(); dentro do while mesmo ?

Não, deixe como está.

Galera deu certo valeu era só add p1 = new Pessoa(); rs

Galera se não for pedir muito como implementaria para remover, atualizar e filtrar uma pessoa ? poderiam me ajudar nesse sentido ?

E você falou pra mim que já tinha tentado :slight_smile:

Se você ler a API de ArrayList vai ver que ela já tem métodos que fazem isso aí que você quer. É só usá-los.