2013-11-23 206 views
2

好的,所以我写了这个简单的代码来计算BMI并根据输入的值提供结果(即:BMI +正常/肥胖等)。笔者随机开始测试它,发现它的工作为我把除了体重= 73和身高= 1.71的所有值...BMI计算器错误? Java

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"); 

} 

    } 

我想这可能是因为这些值计算出的体重指数是24.9这是一个边界值。有人可以帮我解决这个问题吗?提前致谢。

+1

我没有看到问题出在哪里,但我想告诉你下面的内容, 在下面的表达式中(BMI> = 25 && BMI <= 29.9)''你可以将最后一个操作符改为'<'而不是'<='和最后一个数字到'30',所以它也会包含像'29.95'这样的值。像这样:'(BMI> = 25 && BMI <30)'(所有其他IF语句都是一样的) –

回答

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结构代替。

0

你说得对。

73/(1.71 * 1.71) = 24.964... 

这是既不高于25下面24.9也不。 Java不会假定你只需要1个小数位。一般来说,要捕捉“达到并包括”的想法,您应该使用一对<>=