1
resposta

Não consigo fazer com que o programa pare de calcular o IMC dos valores errado

Estou fazendo o projeto da nutricionista da Alura e quis implementar um pouco mais dando a situação do usuário, como obeso ou peso abaixo do que deveria.

Quando o programa identifica a altura acima de 3 metros ou o peso acima de 1000kg ele apresenta uma mensagem de erro, mas mesmo assim o IMC é calculado e mostrado na tela.

Ou seja, pra altura acima de 3 metros ou peso acima de 1000 a situação deveria ser Zero

var pacientes = document.querySelectorAll(".paciente");
for(var i = 0; i < pacientes.length ; i++){
    var paciente = pacientes[i];
    var tdPeso = paciente.querySelector(".info-peso");
    var tdAltura = paciente.querySelector(".info-altura");

    var tdImc = paciente.querySelector(".info-imc");
    var tdSitu = paciente.querySelector(".info-situ");


    var peso = tdPeso.textContent;
    var altura = tdAltura.textContent;
    var situ = tdSitu.textContent;

    var alturaEhValida = true;
    var pesoEhValido = true;

    if(peso <= 0 || peso >= 1000){
        tdSitu.textContent = "0";
        console.log("Peso inválido");
        tdImc.textContent = "Peso inválido!";
        pesoEhValido = false;

        paciente.classList.add("paciente-invalido");
        tdSitu.textContent = "0";


    }

    if(altura <= 0 || altura >= 3.0){
        console.log("Altura inválida");
        tdImc.textContent = "Altura inválida!";
        tdSitu.textContent = "0";
        alturaEhValida = false;

        paciente.classList.add("paciente-invalido");
        tdSitu.textContent = "0";

    }

    if(pesoEhValido && alturaEhValida){
        var imc = peso / ( altura * altura);    
                tdImc.textContent = imc.toFixed(2);

    }    

    if(imc < 18.5){
       tdSitu.textContent = "Você está abaixo do peso"; 
    }

    if(imc >= 18.5 && imc <= 29.9){
       tdSitu.textContent = "Peso normal"; 
    }

    if(imc >= 30){
      tdSitu.textContent = "Obesidade";
 }

}
1 resposta

Olá, Lucas, acho que o erro aqui esta acontecendo no seu if. Quando as variaveis pesoEhValido && alturaEhValida sao falsas o imc e calculado, aqui voce poderia colocar algo assim:

if(pesoEhValido && alturaEhValida){   
          tdImc.textContent ='peso e altura invalido';

 } else {
 var imc = peso / ( altura * altura);    
                tdImc.textContent = imc.toFixed(2);
}

A partir disso voce poderia incrementar mais outras validacoes, porque se o peso for invalido acho que nao da para calcular o imc, isso se aplica para altura tambem, entao voce poderia adicionar mais uma validacao para esse caso.

Espero ter ajudado.