While - Java

Boa noite, estava realizando um exercício com a estrutura while com este código a seguir:

System.out.println(“Informe o sexo: f - femninino, m - masculino”);
sexo = scan.nextLine();
while (!sexo.equalsIgnoreCase(“f”) || !sexo.equalsIgnoreCase(“m”)) {
System.out.println("Sexo inválido, insira novamente: ");
sexo = scan.nextLine();
}
Na impressão do console, o Sysout ("Sexo inválido, insira novamente: "); está aparecendo antes mesmo de eu inserir qualquer letra e as letras ‘M’ e ‘F’ estão dando erro também, alguém me ajudaria? :smiley:
image

Seu problema é parecido com estes abaixo, veja se as respostas deles te ajuda:

O problema não está relacionado com o comentário anterior (poderia, se usasses outros métodos do scanner que não o nextLine() mas estás a usar só este método)

O teu problema é na lógica do while

while (!sexo.equalsIgnoreCase("f") || !sexo.equalsIgnoreCase("m")) {

Aqui dizes que enquanto sexo for diferente de f ou sexo for diferente do m, deve entrar no while. Ora, nenhuma variavel pode ser simultaneamente f e m ao mesmo tempo, logo vai sempre entra no while. O que pretendes é que entre quando a variável for diferente de f e diferente de m:

while (!sexo.equalsIgnoreCase("f") && !sexo.equalsIgnoreCase("m")) {
1 curtida

Sua observação sobre a lógica do while foi muito boa e é um dos problemas mesmo!

Mas eu realmente acredito que o problema também está relacionado ao meu comentário porque ele explicou, e também mostra no print, que ele nem consegue inserir o sexo a primeira vez como se estivesse pulando aquele nextLine fora do while, entende?

Eu notei que antes de ele perguntar o sexo, ele pergunta o salário, então imaginei que ele deve estar usando nextInt, nextFloat ou nextDouble para pegar o salário. Se for isso mesmo, minhas indicações fazem sentido.

1 curtida

Certo, olhei só para pedaço de código sem ler tudo direito.
Existem os dois problemas :slight_smile:

2 curtidas