“你是正常体重”和“你超重”将不会显示。 我的代码:
import java.util.Scanner;
public class BodyMassIndex
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
double bmi, weight, height;
System.out.println("----LETS CHECK YOUR BMI----");
System.out.print("Enter your weight (kg): ");
weight = scan.nextDouble();
System.out.print("Enter your height (m): ");
height = scan.nextDouble();
System.out.println("-----------RESULTS----------");
bmi = weight/(height*height);
System.out.printf("%-10s%-4.2f" , "\t\t Your BMI is " , bmi);
if(bmi<18.5)
{System.out.println("\n\t\t You are UNDERWIGHT");}
else if(bmi==18.5 && bmi <= 24.9)
{System.out.println(" You are NORMAL WEIGHT");}
else if(bmi==25 && bmi <= 29.9)
{System.out.println(" You are OVERWEIGHT");}
else if(bmi > 30)
{System.out.println("\n\t\t You are OBESE");}
else
{}
}
}
答案 0 :(得分:2)
Yossef对此更改是正确的。但是我觉得重要的是你了解你的逻辑在做什么以及它为什么不起作用。
所以,让我们继续前进,只看第一个if语句作为相同的解释同时涵盖错误。
否则if(bmi == 18.5&amp;&amp; bmi&lt; = 24.9)
所以在这里,您正在寻找bmi介于18.5和24.9之间的情况。随着&amp;&amp;在条件语句中,您要求两个语句都为真,以便它通过该检查(按照说)并触发print语句。
让我们看看两个案例:
1)Bmi = 18.5
First, fact check: is bmi between 18.5 and 24.9? Yes.
Now, your code's logic:
bmi == 18.5? True
bmi <= 24.9? True
在这种情况下都通过了。但是,这将适用于任何数字之间。 18.5和24.9?让我们再做一个案例
2)Bmi = 20.0
First, fact check: is bmi between 18.5 and 24.9? Yes.
Now, your code's logic:
bmi == 18.5? False
bmi <= 24.9? True
在这种情况下,它会失败,因为bmi不是18.5。因此,对于任何不是18.5但是在18.5和24.9之间的bmi,检查将失败。
希望澄清原因!
编辑:
AntonH提出了一个很好的观点,我没有忘记。
您可能还想解释为什么
bmi <= 24.9
不好,bmi < 25
更好(因为如果bmi == 24.95,整个事情就会失效)。
正如他所说,使用bmi&lt; 25允许您的应用程序正确评估更精确的bmi值(即更多小数点),例如AntonH在bmi为24.95时使用的情况。
答案 1 :(得分:0)
更改if语句 - 括号中的逻辑
bmi==18.5 to bmi >=18.5 and bmi==25 to bmi >=25
答案 2 :(得分:-1)
你的if语句错了。以这种方式纠正:
else if(bmi >= 18.5 && bmi <= 24.9)
{System.out.println(" You are NORMAL WEIGHT");}
else if(bmi >= 25 && bmi <= 29.9)
{System.out.println(" You are OVERWEIGHT");}