Duvida em foreach

4 respostas
Medieval_Historia

Boa noite a todos, escrevi o seguinte método:

private static void buscaCodigo() {
		int codigo;
		char resp;
		do {
			System.out.println("--------------PEQUISA CONTATO POR CÓDIGO--------------");
			System.out.print("Código: ");
			codigo = leia.nextInt();
			for (Contato objContato : contatos) {
				if (objContato.getCodigo() == codigo) {
					objContato.mostraContato();
					break;
				} else {
					System.out.println("Código inexistente!");
					break;
				}
			}
			
			System.out.println("Nova pesquisa(S/N)?");
			resp = leia.next().charAt(0);
		} while (resp == 's' || resp == 'S');
		
		System.out.println("");
		leia.nextLine();// limpeza de buffer
	}

O primeiro contato cadastrado ele imprime corretamente, se buscar outros ele dá a mensagem de contato inexistente e não compreendo por que.
Escrevi também o método de listar contatos para testar se os contatos estavam sendo cadastrados e todos aparecem na listagem perfeitamente.

private static void listaContatos() {
		for (Contato objContato : contatos) {
			if(objContato != null){
				objContato.mostraContato();
			}	
		}
	}

Alguém conseguiria me apontar o erro por favor.

Obrigadoidentar texto pre-formatado em 4 espaços

4 Respostas

igomes

Breakpoint -> debug

Jonas_B_a_r_r_o_s

Quantos contatos você consegue armazenar no cadastro? Existe algum Vetor, ArrayList para armazena-los? Será se não está fazendo a busca no primeiro porque só existe um objeto?

Você consegue cadastrar, por exemplo, cinco, depois colocar para exibir?
Há uma diferença em você cadastrar e exibir imediatamente, e cadastrar varios e exibir depois
Porque você cadastrando e exibindo imediatamente o cadastrado, você está sobrescrevendo o anterior, e nisso dá a impressão que você está cadastrando varios

Eduardo_Maranata10

Amigo coloque todas as classe que você estar utilizando em seu projeto, assim fica dificil fazer uma analise.

Abraço

rmendes08

O problema é a sua lógica, veja:

for (Contato objContato : contatos) {
    if (objContato.getCodigo() == codigo) {
        objContato.mostraContato();
        break;  //1 - para se V   
    } else {
        System.out.println("Código inexistente!");  2 - //será impresso para cada não correspondência
        break;  //1 - para se F
    }
}

Erro 1: você tem um if dentro de um for, e tanto no caso verdadeiro quanto no caso falso, você chama o break. Em lógica, isso se chama tautologia, ou seja, o break vai ser sempre chamado independentemente do resultado seu teste. Se o break vai ser chamado sempre, então o seu loop nunca vai passar do 1o elemento.

Erro 2: mais uma vez, você pensou somente no 1o elemento. Para você concluir que um código não existe na lista, você tem que percorrer toda a lista antes, portanto, essa verificação deve ser feita após o loop.

Criado 28 de julho de 2016
Ultima resposta 29 de jul. de 2016
Respostas 4
Participantes 5