[Resolvido] Método Buscar

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.

Mostra onde você chama.

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? :smiley:

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);

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?