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?
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 fou 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 fe diferente de m:
while (!sexo.equalsIgnoreCase("f") && !sexo.equalsIgnoreCase("m")) {
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.