loops-e-arrays
loops-e-arrays copied to clipboard
Exercio 03 - Dados de uma Pessoa
No meu código, mesmo informando a letra f ou m, continua solicitando para informar novamente.
System.out.println("Informe o sexo: ");
sexo = scan.next();
while(sexo != "f" | sexo != "m") {
System.out.println("O sexo deve ser f (feminino), ou m (masculino)! Informe novamente: ");
sexo = scan.next();
if (sexo == "f" | sexo == "m") break;
}
Oi, @Marci8622. Tudo bem? Seguinte:
- lógica está correta, o "erro" é o sinal de ou
|que deveria ser&. - Quando estamos trabalhando com um objeto da classe
String(no exemplo, a variável sexo) e precisamos fazer uma comparação, utilizamos o métodoequals(). Nesse caso, utilizei oequalsIgnoreCase(). Esse método ignora se aStringestá em maiúscula ou minuscula.
Primeiro, dá uma olhadinha nessa "Tabela Verdade das Operações lógicas" e veja a diferença de quando utilizamos o | - &:

Rodando o código em modo debug e informando a letra "f":
- No seu caso, utilizando o ou
|: falso + verdadeiro = verdadeiro. Logo o while é "startado".

- Neste outro caso, utilizando o e
&: falso + verdadeiro = falso. Logo o while não é "startado".

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Informe o sexo: ");
String sexo = scan.next();
while(!sexo.equalsIgnoreCase("f") | !sexo.equalsIgnoreCase("m")) {
System.out.println("O sexo deve ser f (feminino), ou m (masculino)! Informe novamente: ");
sexo = scan.next();
if (sexo.equalsIgnoreCase("f") | sexo.equalsIgnoreCase("m")) break;
}
}
Se ainda tem dúvidas, é só falar. (:
Ah, e como é só uma letra, você pode usar o char no lugar de String.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Informe o sexo: ");
char sexo = scan.next().charAt(0);
while(sexo != 'f' & sexo != 'm') {
System.out.println("O sexo deve ser f (feminino), ou m (masculino)! Informe novamente: ");
sexo = scan.next().charAt(0);
if (sexo == 'f' | sexo == 'm') break;
}
}