2013-11-23 2 views
2

Итак, я написал этот простой код для расчета ИМТ и предоставления результата в соответствии с введенными значениями (например: BMI + normal/obese и т. Д.). Я случайно начал испытывать его и выяснил, что это работает для всех значений, которые я ставлю в КРОМЕ вес = 73 и высотой = 1,71 ...Ошибка BMI Calculator ?! 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 (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 else if ... else if ... else.

0

Вы правы.

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

это ни ниже, ни выше 24,9 25. Java не делает предположений, что вы хотите только 1 десятичное место. В общем, чтобы запечатлеть идею «до и в том числе», вы должны использовать пару < и >=.