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.
packagesebo.model;publicclassPessoa{privateStringnome;privateStringtelefone;privateStringemail;//get e setpublicPessoa(){}publicPessoa(Stringnome,Stringtelefone,Stringemail){super();this.nome=nome;this.telefone=telefone;this.email=email;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetTelefone(){returntelefone;}publicvoidsetTelefone(Stringtelefone){this.telefone=telefone;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}@OverridepublicStringtoString(){returnnome+" "+telefone+" "+email;}}
packagesebo.test;importjava.util.ArrayList;importjava.util.Collection;importjava.util.List;importjava.util.Scanner;importsebo.dao.PessoaDAO;importsebo.model.Pessoa;publicclassPessoaIncluirDenovo{publicstaticvoidmain(String[]args){Scannerscn=newScanner(System.in);Stringnome=" ";Stringtelefone=" ";Stringemail=" ";Stringopcao=" ";//opcao = scn.nextLine();//List<Pessoa> dados = new ArrayList<Pessoa>();Pessoap1=newPessoa();//Pessoa p2 = new Pessoa();PessoaDAOdao=newPessoaDAO();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 listaPessoa p1 = new Pessoa();Pessoa p2 = new Pessoa();PessoaDAO dao = new PessoaDAO();p1.setNome("Joaquim");p1.setEmail("[email removido]");p1.setTelefone("12345678"); p2.setNome("Maria");p2.setEmail("[email removido]");p2.setTelefone("45980128"); //adicionar objeto na listadao.adiciona(p1);dao.adiciona(p2);//exibe dadosSystem.out.println("Lista");dao.exibirListaPessoa();//Exibir a quantidade de elementos cadastradosdao.quantidadePessoasCadastradas();//exibir valore s do getSystem.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());*/}}
Rodrigo_Sasaki
OK, Agora tente explicar melhor seu problema, não consegui entender.
Como assim o último registro está repetindo?
cadmiel
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
Rodrigo_Sasaki
tente instanciar o objeto novamente a cada iteração do while, para ter uma nova referência.
cadmiel
Então digaoneves já coloquei ele também dentro do while e continua repetindo…o ultimo registro inserido.
cadmiel
Agora quando criu os registro manual, inclusive cheguei a comentar ai da certo, só que o usuario precisa inserir quantos registros ele quiser rs
Rodrigo_Sasaki
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
não, ainda não cheguei a fazer isso
cadmiel
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
Rodrigo_Sasaki
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í.
AlexandreTLazaro
Depois que vc fizer isto:
dao.adiciona(p1);
faça isso:
p1=newPessoa();
vai resolver teu problema…
Rodrigo_Sasaki
AlexandreTLazaro:
Depois que vc fizer isto:
dao.adiciona(p1);
faça isso:
p1=newPessoa();
vai resolver teu problema…
Sua sugestão não é a mesma que a minha ?
AlexandreTLazaro
eu nem vi suas sugestões, eu soh li o problema dele e respondi.
cadmiel
valeu galera farei isso, mas dai coloco o dao.exibirListaPessoa(); dentro do while mesmo ?
Rodrigo_Sasaki
Não, deixe como está.
cadmiel
Galera deu certo valeu era só add p1 = new Pessoa(); rs
cadmiel
Galera se não for pedir muito como implementaria para remover, atualizar e filtrar uma pessoa ? poderiam me ajudar nesse sentido ?
Rodrigo_Sasaki
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.
AlexandreTLazaro
Então kra, c vai fazer o seguinte:
Vai varrer teu array de pessoas e vai verificar se o código da pessoa q vc está tentando excluir existe nesta lista.
Mesma coisa com o editar…varre a lista, verifica o código da pessoa dentro da lista, se for o mesmo, traz na tela.
para filtrar vc vai pegar por exemplo: o nome da pessoa, vai varrer tua lista fica mais facil com um for each, procure pela sua sintaxe e verifique se o nome do teu objeto, ou seja, pessoa, é igual, então vc manda mostrar só este kra…ok?
qqer coisa, tamo aew
R
rh_pestana
Resolveu???
cadmiel
Até agora nada, apenas to fazendo o remover na minha classe DAO estou fazendo assim
Está certo ?
e depois na minha classe man simplesmente chamo o metodo passando como parametro um objeto do tipo pessoa, por que não está funcionando ? dei uma pesuisada aqui no forum e a galera fala muito de hash asso q é assim que escreve o que seria isso ?
Rodrigo_Sasaki
cadmiel:
Até agora nada, apenas to fazendo o remover na minha classe DAO estou fazendo assim
Está certo ?
e depois na minha classe man simplesmente chamo o metodo passando como parametro um objeto do tipo pessoa, por que não está funcionando ? dei uma pesuisada aqui no forum e a galera fala muito de hash asso q é assim que escreve o que seria isso ?
Para que isso funcione você precisa sobrescrever os métodos equals e hashCode na sua classe Pessoa.
cadmiel
Galera preciso de ajuda até agora não consegue rs
fiz aqui algumas coisas porem não está dando certo rs
OK, agora o usuário consegue cadastrar, exibir, alterar e excluir porém não consigo fazer para procurar um determinado registro no Arraylist, alguém poderia me dar algumas dicas de como fazer ?
Rodrigo_Sasaki
Itere a lista e compare o atributo que quer, com o atributo equivalente de cada item da lista, caso encontre, retorne o objeto.
cadmiel
Gostaria de saber como manipulo esse metodo para percorrer o arraylist ?
o metodo postado abaixo está na PessoaDAO