BMI计算器错误?! Java的

时间:2013-11-23 14:38:50

标签: java math

好的,所以我写了这个简单的代码来计算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,这是一个临界值。有人可以帮我解决这个问题吗?提前谢谢。

2 个答案:

答案 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个小数位。一般来说,为了捕捉“最多和包含”的概念,您应该使用一对<>=