Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Calcular IMC com Mais de Duas Condições.

Galera é o seguinte estou tentando fazer o calculo de IMC parecido com o que tem no curso de inicialização em javascript da formação voltada para "Iniciante em programação " porém no exemplo dado lá só temos duas condições e aqui adicionei mais três porém pelo resultado IMC ele deveria exibir apenas o a quarta condição mas ele está me imprimindo as seguintes condições; Resultado do IMC: 30.864197530864196 Sua Classificação é de Magreza Sua Classificação Está Dentro do Normal Sua Classificação é Obesidade Grave III

public class CalculandoImc {

    public static void main(String[] args) {
        double peso = 100;
        double altura = 1.80;
        double imc = peso / (altura * altura);
        System.out.println(imc);

        if (imc >= 18.5) {
            System.out.println("Sua Classificação é de Magreza");
        } else if (imc <= 18.5 && imc >= 24.9) ;{
            System.out.println("Sua Classificação Está Dentro do Normal");
        } if (imc <= 25.0 && imc >= 29.9) {
            System.out.println("Sua Classificação é de Sobrepeso I");
        } else if (imc <= 30.0 && imc >= 39.9) {
            System.out.println("Sua Classificação é Obesidade II");
        } else if (imc <= 40.0 ) {
            System.out.println("Sua Classificação é Obesidade Grave III");
        }
    }
}
1 resposta
solução!

Opa Wellington, tudo tranquilo?

Pelo o que eu estou vendo, como o resultado do IMC é ~30, ele acaba entrando em várias condições diferentes.

Imgur

Eu fui vendo um por um o que deu de errado, mas a verdade é que a solução é bem mais simples e parece que só houve uma confusão na hora de colocar os sinais de comparação <= e >=. Então se quiser saber a solução logo de cara pode pular para o final da resposta! Mas enfim, vamos lá:

Para resolver isso, precisamos mudar as condições contidas nos ifs. Analisando cada if separadamente, vemos que algumas condições acabam sendo verdadeiras para um mesmo valor:

if (imc >= 18.5) {
    System.out.println("Sua Classificação é de Magreza");

Na primeira condição, o ideal é que nós possamos limitar o escopo dela. Ou seja, da forma como ela está agora, QUALQUER valor acima de 18.5 vai acabar caindo nela. Por ser Classificação é de Magreza, acredito que o correto seria inverter o sinal de >= (maior ou igual) para <= (menor ou igual).

else if (imc <= 18.5 && imc >= 24.9) ;{
    System.out.println("Sua Classificação Está Dentro do Normal");

Essa segunda condição nunca será verdadeira, pois é impossível um número ser menor ou igual a 18.5 e maior ou igual a 24.9 ao mesmo tempo. O motivo da mensagem dessa condição estar sendo exibida mesmo sabendo disso, é por conta do ; (ponto e vírgula) antes das chaves.

if (imc <= 25.0 && imc >= 29.9) {
    System.out.println("Sua Classificação é de Sobrepeso I");

Aqui o ideal é deixar como else if assim como os outros para evitar fazer novas comparações. Ou seja, mesmo que uma das condições anteriores fossem verdadeiras e já não houvesse mais necessidade de realizar outras comparações, ainda assim o programa rodaria essa comparação por ser um if e não um else if. Além de também ser impossível um número ser menor ou igual a 25.0 e maior ou igual a 29.9 ao mesmo tempo

else if (imc <= 30.0 && imc >= 39.9) {
    System.out.println("Sua Classificação é Obesidade II");

Aqui é o mesmo caso das condições anteriores, um número não pode ser menor ou igual a 30.0 e maior ou igual a 39.9 ao mesmo tempo. Portanto essa condição nunca será verdadeira.

else if (imc <= 40.0 ) {
    System.out.println("Sua Classificação é Obesidade Grave III");

Por fim, temos a última condição que, assim como o primeiro if, quase sempre será verdadeira já que as duas condições anteriores sempre serão falsas e QUALQUER valor abaixo de 40.0 vai acabar caindo nela.

Parece muita coisa? Pois na verdade não é, basta você tirar aquele ponto e vírgula perdido antes das chaves da segunda condição, trocar o if da terceira condição por else if e inverter todos os sinais de >= (maior ou igual) para <= (menor ou igual) e vice-versa.

Espero que isso ajude. Se ficou alguma dúvida é só avisar!

Bons estudos!!