loops-e-arrays icon indicating copy to clipboard operation
loops-e-arrays copied to clipboard

Exercio 03 - Dados de uma Pessoa

Open Marci8622 opened this issue 3 years ago • 2 comments

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

Marci8622 avatar Apr 12 '22 01:04 Marci8622

Oi, @Marci8622. Tudo bem? Seguinte:

  1. lógica está correta, o "erro" é o sinal de ou | que deveria ser &.
  2. Quando estamos trabalhando com um objeto da classe String (no exemplo, a variável sexo) e precisamos fazer uma comparação, utilizamos o método equals(). Nesse caso, utilizei o equalsIgnoreCase(). Esse método ignora se a String está 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 | - &:

Screenshot from 2022-04-12 10-35-18

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".

2022-04-12_10-42

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

2022-04-12_10-40

  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. (:

cami-la avatar Apr 12 '22 13:04 cami-la

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

cami-la avatar Apr 12 '22 14:04 cami-la