Prezados estou com um problema, estou cadastrando um nome e mail, e preciso fazer uma busca apenas pelo nome, e que me retorne o nome e o email.
estou usando duas classes, Contato que possui os dois atributos: nome e mail.
e a classe Agenda.
public class Agenda {
ArrayList<Contato> listaCont;
public Agenda() {
listaCont = new ArrayList<>();
}
void AdicionarContato(String nomeCon, String emailCon) {
Contato con = new Contato(nomeCon, emailCon);
listaCont.add(con);
}
void BuscarContato() {
Scanner ent = new Scanner(System.in);
String nomeBus;
System.out.println("Buscar Contato por Nome: ");
nomeBus = ent.next();
//Iterator it = listaCont.
for (int i = 0; i < listaCont.size(); i++) {
if (listaCont.get(i).getNomeCon().equalsIgnoreCase(nomeBus)) {
System.out.println(listaCont.get(i).getNomeCon());
} else {
System.out.println("Sem Cadastro!");
}
}
}
}
não da erro.
chamo ele no if op == 2
public class AulaOitoRevisao {
public static void main(String[] args) {
String nome, email;
int op;
ArrayList<Contato> listaContato;
listaContato = new ArrayList();
Scanner ent = new Scanner(System.in);
Agenda agenda = new Agenda();
do {
System.out.println("1 - Add Contato");
System.out.println("2 - Buscar Contato");
System.out.println("3 - Excluir Contato");
System.out.println("4 - Listar");
System.out.println("0 - Sair");
op = ent.nextInt();
if (op == 1) {
ent.nextLine();
System.out.println("Nome do Contato: ");
nome = ent.nextLine();
System.out.println("E-mail do contato: ");
email = ent.nextLine();
Contato contato = new Contato(nome, email);
listaContato.add(contato);
System.out.println("\n** Contato Cadastrado **\n");
} else if (op == 2) {
agenda.BuscarContato();
System.out.println("\n");
} else if (op == 3) {
String nomeEx = null;
System.out.println("Ecluir Registro Pelo Nome: ");
nomeEx = ent.next();
agenda.ExcluirContato(nomeEx);
} else if (op == 4) {
for (Contato c : listaContato) {
c.Listar();
}
}
} while (op != 0);
}
}
O problema é que você está imprimindo quando tem e quando não tem contato, pois as duas validações estão dentro do for.
Faz assim dentro do método busca contato:
Scanner ent = new Scanner(System.in);
String nomeBus;
System.out.println("Buscar Contato por Nome: ");
nomeBus = ent.next();
Contato contatoRetorno = null;
for (Contato contato : listaCont) {
if (contato.getNomeCon().equalsIgnoreCase(nomeBus)) {
contatoRetorno = contato;
break;
}
}
if(contatoRetorno != null) {
System.out.println("Nome: " + contatoRetorno.getNomeCon() + "\n E-mail: " contatoRetorno.getEmail());
}else {
System.out.println("Sem Cadastro!");
}
Entendi Vinicius, só que agora ele sempre esta caindo no else.
Qual nome você está inserindo?
Tem como me mostrar o console?
Estou digitando meu nome e depois no email meu nome com um @ depois.
run:
1 - Add Contato
2 - Buscar Contato
3 - Excluir Contato
4 - Listar
0 - Sair
1
Nome do Contato:
ari
E-mail do contato:
ari@
** Contato Cadastrado **
1 - Add Contato
2 - Buscar Contato
3 - Excluir Contato
4 - Listar
0 - Sair
2
Buscar Contato por Nome:
ari
Sem Cadastro!
1 - Add Contato
2 - Buscar Contato
3 - Excluir Contato
4 - Listar
0 - Sair
Me mostra a classe Contato
public class Contato {
private String nomeCon;
private String emailCon;
Contato() {
}
public String getNomeCon() {
return nomeCon;
}
public void setNomeCon(String nomeCon) {
this.nomeCon = nomeCon;
}
public String getEmailCon() {
return emailCon;
}
public void setEmailCon(String emailCon) {
this.emailCon = emailCon;
}
public Contato(String nomeCon, String emailCon) {
this.nomeCon = nomeCon;
this.emailCon = emailCon;
}
void Listar() {
JOptionPane.showMessageDialog(null, "Nome: " + getNomeCon()
+ "\nEmail: " + getEmailCon());
}
}
Me mostra o seu novo BuscaContato?
segue,
void BuscarContato() {
Scanner ent = new Scanner(System.in);
String nomeBus;
System.out.println("Buscar Contato por Nome: ");
nomeBus = ent.next();
Contato contatoRetorno = null;
for (Contato contato : listaCont) {
if (contato.getNomeCon().equals(nomeBus)) {
contatoRetorno = contato;
break;
}
}
if (contatoRetorno != null) {
System.out.println("Nome: " + contatoRetorno.getNomeCon()
+ "\nEmail: " + contatoRetorno.getEmailCon());
} else {
System.out.println("Sem Cadastro!");
}
}
if (contato.getNomeCon().equals(nomeBus)
Troca por isso pra vê se funciona…
if (contato.getNomeCon().equalsIgnoreCase(nomeBus)
Não funcionou, como se a lista não estivesse nada.
Pode parecer uma pergunta besta, mas você está adicionando o contato antes de tentar buscar? Pois cada vez que você roda a aplicação, a lista é zerada, então você tem que adicionar sempre que rodar a aplicação.
kkkk, tudo é valido, estou sim inserindo, na classe contato tem um Metodo Listar e funciona direitnho.
Achei o problema! kkkk
Na hora que você adiciona você está adicionando em uma lista diferente da agenda
ent.nextLine();
System.out.println("Nome do Contato: ");
nome = ent.nextLine();
System.out.println("E-mail do contato: ");
email = ent.nextLine();
Contato contato = new Contato(nome, email);
-->listaContato.add(contato);<--
System.out.println("\n** Contato Cadastrado **\n");
Você precisa adicionar o item da lista da agenda, e não o arraylist que você criou depois.
Fica assim:
ent.nextLine();
System.out.println("Nome do Contato: ");
nome = ent.nextLine();
System.out.println("E-mail do contato: ");
email = ent.nextLine();
Contato contato = new Contato(nome, email);
agenda.AdicionarContato(contato);
System.out.println("\n** Contato Cadastrado **\n");
Creio que vá funcionar desse modo, só que o método AdicionarContato() recebe dois parâmetros e desse jeito ele esta levando apenas 1.
nessa linha:
agenda.AdicionarContato(contato);
Aristofanes89:
, só que o método Ad
Coloca agenda.AdicionarContato(contato.getNomeCon(), contato.getEmailCon());
Ou então agenda.AdicionarContato(nome, email);
Show, muito massa! vlw mesmo.
Como seria pra fazer o excluir pelo nome?