cami-la / loops-e-arrays

Repositório do curso Estruturas de Repetição e Arrays com Java. Curso este oferecido pela Digital Innovation one e ministrado por mim.
https://web.digitalinnovation.one/home
1.38k stars 351 forks source link

Exercio 03 - Dados de uma Pessoa #14

Open Marci8622 opened 2 years ago

Marci8622 commented 2 years ago

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;
    }
cami-la commented 2 years ago

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

2022-04-12_10-42

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 commented 2 years ago

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