cadmiel
Outubro 3, 2012, 11:42am
#1
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.
cadmiel
Outubro 3, 2012, 11:50am
#3
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?
cadmiel
Outubro 3, 2012, 11:59am
#5
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
tente instanciar o objeto novamente a cada iteração do while, para ter uma nova referência.
cadmiel
Outubro 3, 2012, 12:07pm
#7
Então digaoneves já coloquei ele também dentro do while e continua repetindo…o ultimo registro inserido.
cadmiel
Outubro 3, 2012, 12:08pm
#8
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.
cadmiel
Outubro 3, 2012, 12:19pm
#10
não, ainda não cheguei a fazer isso
cadmiel
Outubro 3, 2012, 12:25pm
#11
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
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.
cadmiel
Outubro 3, 2012, 1:16pm
#16
valeu galera farei isso, mas dai coloco o dao.exibirListaPessoa(); dentro do while mesmo ?
cadmiel
Outubro 3, 2012, 4:50pm
#18
Galera deu certo valeu era só add p1 = new Pessoa(); rs
cadmiel
Outubro 3, 2012, 6:01pm
#19
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
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.