[RESOLVIDO] Pesquisa em um ArrayList
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:
* p = Objeto da minha classe Pessoa.
* contatos = ArrayList que contém os dados salvos.
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!");
}
}
}
Kelvin Bianchi
Curtidas 0
Respostas
Douglas Eric
12/01/2012
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())){
GOSTEI 0
Douglas Eric
12/01/2012
[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
Opa! Funcionou, está pegando o nome corretamente, mas a respeito dos outros dados, ele está pegando os últimos que estão sendo cadastrados.
if(contatos.get(i).getNome().equals(p.getNome())){
GOSTEI 0
Douglas Eric
12/01/2012
outros dados? :arrow:
GOSTEI 0
Douglas Eric
12/01/2012
[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
GOSTEI 0
Douglas Eric
12/01/2012
System.out.println(p);
System.out.println(contatos.get(i));
GOSTEI 0
Douglas Eric
12/01/2012
[quote="sekkuar"]
seria
isso?
:?: :?: :?:
Ainda está pegando o último dado cadastrado, vou mandar a classe completa, vai ficar mais fácil pra entender a estrututura.
System.out.println(p);
System.out.println(contatos.get(i));
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();
}
}
GOSTEI 0
Douglas Eric
12/01/2012
assim fica melhor, e deve funcionar
Mas eu acho que seria bom usar um [url=http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html]foreach[/url]
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;
}
}
}
GOSTEI 0
Douglas Eric
12/01/2012
[quote="sekkuar"]assim fica melhor, e deve funcionar
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]
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;
}
}
}
GOSTEI 0
Douglas Eric
12/01/2012
a tah, já entendi.
É um velho problema de criar apenas um objeto e ficar reutilizando.
Você está usando sempre o mesmo objeto Pessoa p, ou seja, não cria um novo, só muda os valores dele.
assim resolve:
desse modo você cria um novo Pessoa para cada cadastro.
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 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);
}
//...
GOSTEI 0
Douglas Eric
12/01/2012
[quote="sekkuar"]a tah, já entendi.
É um velho problema de criar apenas um objeto e ficar reutilizando.
Você está usando sempre o mesmo objeto Pessoa p, ou seja, não cria um novo, só muda os valores dele.
assim resolve:
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. ^.^
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 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);
}
//...
GOSTEI 0
Douglas Eric
12/01/2012
[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. ^.^ GOSTEI 0
Douglas Eric
12/01/2012
[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. ^.^ GOSTEI 0
Douglas Eric
12/01/2012
[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.
GOSTEI 0
Douglas Eric
12/01/2012
[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. GOSTEI 0