Arraylist

29 respostas
cadmiel

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 ?

29 Respostas

Rodrigo_Sasaki

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
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("[email removido]");
p1.setTelefone("12345678"); 
p2.setNome("Maria");
p2.setEmail("[email removido]");
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());
*/
}
}
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 :slight_smile:

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 :frowning:

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 :slight_smile:

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 = new Pessoa();

vai resolver teu problema…

Rodrigo_Sasaki

AlexandreTLazaro:
Depois que vc fizer isto:

dao.adiciona(p1);

faça isso:

p1 = new Pessoa();

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 :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.

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

Resolveu???

cadmiel

Até agora nada, apenas to fazendo o remover na minha classe DAO estou fazendo assim

public void removerPessoa(Pessoa pessoa) {

lista.remove(pessoa);

}

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

public void removerPessoa(Pessoa pessoa) {

lista.remove(pessoa);

}

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

cadmiel
Sobrescrecer desse geito
@Override  
    public int hashCode() {  
        final int prime = 31;  
        int result = 1;  
        result = prime * result  
                + ((paciente == null) ? 0 : paciente.hashCode());  
        return result;  
    }  
  
    @Override  
    public boolean equals(Object obj) {  
        if (this == obj)  
            return true;  
        if (obj == null)  
            return false;  
        if (getClass() != obj.getClass())  
            return false;  
        DadoAnalisar other = (DadoAnalisar) obj;  
        if (paciente == null) {  
            if (other.paciente != null)  
                return false;  
        } else if (!paciente.equals(other.paciente))  
            return false;  
        return true;  
    }

???

cadmiel

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

public void quantidadePessoasCadastradas(){
	System.out.println(lista.size());
}

No Main chamo ele porém não sei como percorrer ele para saber se tem o registro q desejo alterar.

J

Se vc quer verificar se na tua List possui o registro, é possível vc fazer:

Utilizei uma List de String como exemplo

List<String> str = new ArrayList<>();
		
		
		for (String aux : str) {
			if (aux.equalsIgnoreCase("valorDesejado")){
				System.out.println("Existe o registro");
			}
		}

Seria essa a dúvida?

Criado 3 de outubro de 2012
Ultima resposta 17 de out. de 2012
Respostas 29
Participantes 5