3
respostas

[Dúvida] Dúvida

Alguém pode me explicar por que o programa não está aceitando nem as letras M ou F?

Nessa parte do código:

if (genero == "M") {
                    qntdHomens++;
                    soma = soma + alturas;
                } else if (genero == "F") {
                    qntdMulheres++;
                } else {
                    System.out.println("Gênero inválido!");
                }
package br.com.exercicioweb;

import java.util.InputMismatchException;
import java.util.Scanner;

public class AlturaHomensEMulheres {

    public static void main(String[] args) {

        int qntdMulheres = 0;
        int qntdHomens = 0;
        double alturas = 0;
        double soma = 0;
        double mediaHomens = 0;
        double maior = 0;
        double menor = 0;

        Scanner leitura = new Scanner(System.in);

        try {
            for (int i = 0; i < 5; i++) {
                System.out.println("Digite seu gênero: M para masculino ou F para feminino");
                String genero = leitura.next();

                if (genero == "M") {
                    qntdHomens++;
                    soma = soma + alturas;
                } else if (genero == "F") {
                    qntdMulheres++;
                } else {
                    System.out.println("Gênero inválido!");
                }

                System.out.println("Digite a sua altura: ");
                alturas = leitura.nextDouble();

                if (alturas > maior) {
                    maior = alturas;
                } else if (alturas < menor) {
                    menor = alturas;
                }
            }
        } catch (InputMismatchException e) {
            System.out.println("Digite um caractere válido!");

        }

        mediaHomens = soma / qntdHomens;

        System.out.println("A maior altura do grupo é: " + maior + " metros, e a menor é de " + menor + " metros");
        System.out.println("A média de altura dos homens é: " + mediaHomens + "metros");
        System.out.println("O número de mulheres é: " + qntdMulheres);

        leitura.close();
    }
}
3 respostas

Olá Patrícia, tudo bem com você?

Quando utilizamos o operador == para comparar strings, estamos comparando as referências de memória e não o conteúdo das strings em si. Para comparar o conteúdo das strings. Devemos utilizar o método equals() da classe String, este método retorna true se o conteúdo das strings for igual e false caso contrário.

Assim, no seu código, você deve trocar as linhas: if (genero == "M") e else if (genero == "F") por: if (genero.equals("M")) e else if (genero.equals("F")), após a mudança essa estrutura condicional ficará da seguinte forma:

if (genero.equals("M")) {
    qntdHomens++;
    soma = soma + alturas;
} else if (genero.equals("F")) {
    qntdMulheres++;
} else {
    System.out.println("Gênero inválido!");
}

Após realizar a mudança descrita acima, salve o arquivo e execute-o novamente.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi Felippe,

muito obrigada por me ajudar, deu certo! :) Apareceu mais duas dúvidas , como faço para formatar os números? Para imprimir as alturas com duas casas decimais. Tentei de várias formas mas não deu certo. E o cálculo da média de altura dos homens, não está correta.

Olá Patrícia, tudo bem com você?

Para trabalharmos com a formatação do resultado da impressão, de forma que seja limitado o número de casas decimais, devemos utilizar a função System.out.printf para a impressão, da seguinte forma:

System.out.printf("A média de altura dos homens é: %.2f metros %n", mediaHomens);

No exemplo acima, o %.2f marca o ponto da string que irá receber o conteúdo da variável mediaHomens. O .2f indica que o conteúdo será um double ou float e que deve ser apresentado apenas duas casas decimais (.2). Já o %n indica que deve ser adicionado uma nova linha.

Sobre o cálculo da média de alturas não está acontecendo da forma correta, isso ocorre devido à última altura coletada não está sendo adicionado a variável soma, já que esta adição está ocorrendo antes da coleta da entrada do usuário na linha alturas = leitura.nextDouble();, desta forma a altura do último usuário não é atribuída a variável soma. Para realizar a correção, basta modificar o local que ocorre a atribuição da variável soma, deixando abaixo da linha alturas = leitura.nextDouble(); como apresentado abaixo:

System.out.println("Digite a sua altura: ");
alturas = leitura.nextDouble();
soma = soma + alturas;

Código completo com as mudanças aplicadas

package br.com.exercicioweb;

import java.util.InputMismatchException;
import java.util.Scanner;

public class AlturaHomensEMulheres {

    public static void main(String[] args) {

        int qntdMulheres = 0;
        int qntdHomens = 0;
        double alturas = 0;
        double soma = 0;
        double mediaHomens = 0;
        double maior = 0;
        double menor = 0;

        Scanner leitura = new Scanner(System.in);

        try {
            for (int i = 0; i < 5; i++) {
                System.out.println("Digite seu gênero: M para masculino ou F para feminino");
                String genero = leitura.next();

                if (genero.equals("M")) {
                    qntdHomens++;

                } else if (genero.equals("F")) {
                    qntdMulheres++;
                } else {
                    System.out.println("Gênero inválido!");
                }

                System.out.println("Digite a sua altura: ");
                alturas = leitura.nextDouble();
                soma = soma + alturas;

                if (alturas > maior) {
                    maior = alturas;
                } else if (alturas < menor) {
                    menor = alturas;
                }
            }
        } catch (InputMismatchException e) {
            System.out.println("Digite um caractere válido!");

        }

        mediaHomens = soma / qntdHomens;

        System.out.println("A maior altura do grupo é: " + maior + " metros, e a menor é de " + menor + " metros");
        System.out.printf("A média de altura dos homens é: %.2f metros %n", mediaHomens);
        System.out.println("O número de mulheres é: " + qntdMulheres);

        leitura.close();
    }

}

Todavia, vale ressaltar que como é um assunto externo ao curso, outras implementações podem ser necessárias, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu projeto.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!