好的,所以我写了这个简单的代码来计算BMI,并根据输入的值提供结果(即:BMI +正常/肥胖等)。我随机开始测试它,发现它适用于我在EXCEPT中输入的所有值,重量= 73,高度= 1.71 ...
package basics;
import java.util.*;
public class BMI {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
double W, H, BMI;
System.out.print("Enter weight in kg");
W = sc.nextDouble();
System.out.print("Enter height in m: ");
H = sc.nextDouble();
BMI = W/(H*H);
System.out.println("Your BMI is : " + (int) BMI);
if (BMI < 18.5)
System.out.println("Underweight");
if (BMI >= 18.5 && BMI <= 24.9)
System.out.println("Normal");
if (BMI >=25 && BMI <= 29.9)
System.out.println("Overweight");
else
if (BMI >= 30)
System.out.println("Obese");
}
}
我认为这可能是因为为这些值计算的BMI是24.9,这是一个临界值。有人可以帮我解决这个问题吗?提前谢谢。
答案 0 :(得分:6)
如果BMI为24.95,您的代码会显示什么?这不正常,因为它不小于或等于24.9,并且不超重,因为它不大于或等于25。
重写if语句,如下所示:
if (BMI < 18.5)
System.out.println("Underweight");
if (BMI >= 18.5 && BMI < 25)
System.out.println("Normal");
if (BMI >=25 && BMI <= 30)
System.out.println("Overweight");
else
if (BMI > 30)
System.out.println("Obese");
或甚至
if(BMI < 18.5) System.out.println("Underweight");
else if (BMI < 25) System.out.println("Normal");
else if (BMI < 30) System.out.println("Overweight");
else System.out.println("Obese");
我更喜欢后者,因为它最大限度地减少了多余比较的数量,使用if ... else if ... else if ... else结构。
答案 1 :(得分:0)
你是对的。
73 / (1.71 * 1.71) = 24.964...
这既不低于24.9也高于25 。 Java没有假设您只需要1个小数位。一般来说,为了捕捉“最多和包含”的概念,您应该使用一对<
和>=
。