GARANTIR DESCONTO

Fórum [RESOLVIDO] Pesquisa em um ArrayList #567078

12/01/2012

0

Preciso fazer uma pesquisa por nome dentro de um ArrayList, e consequentemente caso existir algum cadastro com esse nome, deve aparecer todos os dados que existem no cadastro com este nome, o problema é que minha pesquisa, não está pesquisando. Aqui vai a última (de várias) tentativas que tentei fazer para pesquisar:
public void pesquisarContato(){
		
		System.out.println("Digite o nome do contato a ser pesquisado: ");
		Scanner input = new Scanner(System.in);
		p.setNome(input.nextLine());
		
		for(int i = 0; i < contatos.size(); i ++){
			if(contatos.get(i).equals(p.getNome())){
				System.out.println(p);		
			}else{
				System.out.println("Contato não encontrado!");
				
			}
		}
	}
	
* p = Objeto da minha classe Pessoa. * contatos = ArrayList que contém os dados salvos.
Kelvin Bianchi

Kelvin Bianchi

Responder

Posts

12/01/2012

Douglas Eric

supondo que: A sua ArrayList é do tipo pessoa um Objeto Pessoa NUNCA vai ser igual (equals) a um Objeto String. o nome vai, eventualmente
if(contatos.get(i).getNome().equals(p.getNome())){ 
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="sekkuar"]supondo que: A sua ArrayList é do tipo pessoa um Objeto Pessoa NUNCA vai ser igual (equals) a um Objeto String. o nome vai, eventualmente
if(contatos.get(i).getNome().equals(p.getNome())){ 
Opa! Funcionou, está pegando o nome corretamente, mas a respeito dos outros dados, ele está pegando os últimos que estão sendo cadastrados.
Responder

Gostei + 0

12/01/2012

Douglas Eric

outros dados? :arrow:
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="sekkuar"]outros dados? :arrow:
É porque além de cadastrar o nome, eu salvo também o telefone, e a idade, e quando o usuário pesquisasse o nome, apareceria esses outros dados, no qual o nome pesquisado contém, exemplo pra ficar mais claro: Nome cadastrado: João Idade cadastrada: 20 Telefone cadastrado: 1111-1111 Nome pesquisado: João Exibir: Nome: João Idade: 20 Telefone: 1111-1111
Responder

Gostei + 0

12/01/2012

Douglas Eric

System.out.println(p);      
seria
System.out.println(contatos.get(i));
isso?
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="sekkuar"]
System.out.println(p);      
seria
System.out.println(contatos.get(i));
isso?
:?: :?: :?: Ainda está pegando o último dado cadastrado, vou mandar a classe completa, vai ficar mais fácil pra entender a estrututura.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;


public class Agenda{
	ArrayList<Pessoa> contatos = new ArrayList<Pessoa>();
	Pessoa p = new Pessoa();
	
	public void inserirContato(){
		Scanner input = new Scanner(System.in);
		
		System.out.println("Digite o nome do contato:");
		p.setNome(input.nextLine());
		
		System.out.println("Digite o telefone do contato:");
		p.setTelefone(input.nextLine());	
		
		contatos.add(p);
		
	}
	
	public void pesquisarContato(){
		
		System.out.println("Digite o nome do contato a ser pesquisado: ");
		Scanner input = new Scanner(System.in);
		p.setNome(input.nextLine());
		
		for(int i = 0; i < contatos.size(); i ++){
			if(contatos.get(i).getNome().equals(p.getNome())){
				System.out.println(contatos.get(i));
				break;
			}else{
				System.out.println("Contato não encontrado!");
				break;
			}
		}
	}
	
	public static void main(String args[]){
		Agenda agenda = new Agenda();
		Pessoa p = new Pessoa();
		
		agenda.inserirContato();
		agenda.inserirContato();
		agenda.pesquisarContato();
	}
}
Responder

Gostei + 0

12/01/2012

Douglas Eric

assim fica melhor, e deve funcionar
    public void pesquisarContato(){  
        
      System.out.println("Digite o nome do contato a ser pesquisado: ");  
      Scanner input = new Scanner(System.in);  
      String nome = input.nextLine();  
        
      for(int i = 0; i < contatos.size(); i ++){  
         if(contatos.get(i).getNome().equals(nome)){  
            System.out.println(contatos.get(i));  
            break;  
         }
      }  
   }  
Mas eu acho que seria bom usar um [url=http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html]foreach[/url]
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="sekkuar"]assim fica melhor, e deve funcionar
    public void pesquisarContato(){  
        
      System.out.println("Digite o nome do contato a ser pesquisado: ");  
      Scanner input = new Scanner(System.in);  
      String nome = input.nextLine();  
        
      for(int i = 0; i < contatos.size(); i ++){  
         if(contatos.get(i).getNome().equals(nome)){  
            System.out.println(contatos.get(i));  
            break;  
         }
      }  
   }  
Mas eu acho que seria bom usar um [url=http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html]foreach[/url]
Não funcionou... eu faço os métodos, na hora de pesquisar digito o nome e o programa termina. EDIT: Ele só funciona para os dados da segunda chamado do método [b]inserirContato[/b]
Responder

Gostei + 0

12/01/2012

Douglas Eric

a tah, já entendi. É um velho problema de criar apenas um objeto e ficar reutilizando.
public class Agenda{  
   ArrayList<Pessoa> contatos = new ArrayList<Pessoa>();  
   Pessoa p = new Pessoa();  
     
   public void inserirContato(){  
      Scanner input = new Scanner(System.in);  
        
      System.out.println("Digite o nome do contato:");  
      p.setNome(input.nextLine());  
        
      System.out.println("Digite o telefone do contato:");  
      p.setTelefone(input.nextLine());     
        
      contatos.add(p);  
        
   }  
  //...
Você está usando sempre o mesmo objeto Pessoa p, ou seja, não cria um novo, só muda os valores dele. assim resolve:
public class Agenda{  
   ArrayList<Pessoa> contatos = new ArrayList<Pessoa>();  
   //Pessoa p = new Pessoa();   //apaga aqui
     
   public void inserirContato(){  
      Pessoa p = new Pessoa(); //coloca aqui
      Scanner input = new Scanner(System.in);  
        
      System.out.println("Digite o nome do contato:");  
      p.setNome(input.nextLine());  
        
      System.out.println("Digite o telefone do contato:");  
      p.setTelefone(input.nextLine());     
        
      contatos.add(p);  
        
   }  
  //...
desse modo você cria um novo Pessoa para cada cadastro.
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="sekkuar"]a tah, já entendi. É um velho problema de criar apenas um objeto e ficar reutilizando.
public class Agenda{  
   ArrayList<Pessoa> contatos = new ArrayList<Pessoa>();  
   Pessoa p = new Pessoa();  
     
   public void inserirContato(){  
      Scanner input = new Scanner(System.in);  
        
      System.out.println("Digite o nome do contato:");  
      p.setNome(input.nextLine());  
        
      System.out.println("Digite o telefone do contato:");  
      p.setTelefone(input.nextLine());     
        
      contatos.add(p);  
        
   }  
  //...
Você está usando sempre o mesmo objeto Pessoa p, ou seja, não cria um novo, só muda os valores dele. assim resolve:
public class Agenda{  
   ArrayList<Pessoa> contatos = new ArrayList<Pessoa>();  
   //Pessoa p = new Pessoa();   //apaga aqui
     
   public void inserirContato(){  
      Pessoa p = new Pessoa(); //coloca aqui
      Scanner input = new Scanner(System.in);  
        
      System.out.println("Digite o nome do contato:");  
      p.setNome(input.nextLine());  
        
      System.out.println("Digite o telefone do contato:");  
      p.setTelefone(input.nextLine());     
        
      contatos.add(p);  
        
   }  
  //...
desse modo você cria um novo Pessoa para cada cadastro.
Ahh... nossa como não tinha percebido isso O_o Mas obrigado, agora funcionou perfeitamente, não sou muito bom com ArrayLists (já tenho quase uma fobia de ArrayList) e estou dando umas treinadas só para pegar o básico mesmo. Obrigado mais uma vez. ^.^
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="kbianchi"][quote="sekkuar"] [...]
Ahh... nossa como não tinha percebido isso O_o Mas obrigado, agora funcionou perfeitamente, não sou muito bom com ArrayLists (já tenho quase uma fobia de ArrayList) e estou dando umas treinadas só para pegar o básico mesmo. Obrigado mais uma vez. ^.^
Esse problema não foi com o Arraylist, foi falta de atenção (ou [url=http://www.dicionarioinformal.com.br/noobice/]alguma outra coisa[/url]).
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="ryuuji"][quote="kbianchi"][quote="sekkuar"] [...]
Ahh... nossa como não tinha percebido isso O_o Mas obrigado, agora funcionou perfeitamente, não sou muito bom com ArrayLists (já tenho quase uma fobia de ArrayList) e estou dando umas treinadas só para pegar o básico mesmo. Obrigado mais uma vez. ^.^
Esse problema não foi com o Arraylist, foi falta de atenção (ou [url=http://www.dicionarioinformal.com.br/noobice/]alguma outra coisa[/url]). Mas em nenhum momento eu disse que a culpa era do ArrayList... E foi falta de atenção, pois estava tão preocupado com os comandos do ArrayList que deixei despercebido algo básico.
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="kbianchi"]Mas em nenhum momento eu disse que a culpa era do ArrayList... E foi falta de atenção, pois estava tão preocupado com os comandos do ArrayList que deixei despercebido algo básico.
É aquela velha história... O cara acabou de sair da auto-escola, anda sempre tomando cuidado em tudo. Dois anos dirigindo, ela já acha que sabe dirigir e pode fazer tudo ao mesmo tempo, acaba fazendo uma [i]defecada[/i] das grandes e morre.
Responder

Gostei + 0

12/01/2012

Douglas Eric

[quote="sekkuar"][quote="kbianchi"]Mas em nenhum momento eu disse que a culpa era do ArrayList... E foi falta de atenção, pois estava tão preocupado com os comandos do ArrayList que deixei despercebido algo básico.
É aquela velha história... O cara acabou de sair da auto-escola, anda sempre tomando cuidado em tudo. Dois anos dirigindo, ela já acha que sabe dirigir e pode fazer tudo ao mesmo tempo, acaba fazendo uma [i]defecada[/i] das grandes e morre.
Exatamente.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar