2016-04-26 68 views
-1

我收到NaN错误,当我编译这个时,我无法弄清楚我做错了什么?我试着移动变量来看看我能否让它们工作,但没有任何东西。请注意我放置的类型为double的变量,用于英寸= keyboard.nextInt()后的bmi。我认为它的零分错误,但我不知道我除以零。BodyMassIndex计算器错误(NaN)

import java.util.Scanner; 
public class BodyMassIndex { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int pounds =0;  
    int feet = 0; 
    int inches = 0; 
    double heightMeters = ((feet * 12) + inches) * .0254; 
    double mass = pounds/2.2; 
    Scanner keyboard = new Scanner(System.in); 

    System.out.println("Enter your weight in pounds"); 
    pounds = keyboard.nextInt(); 
    System.out.println("Enter how many feet you are"); 
    feet = keyboard.nextInt(); 
    System.out.println("Enter how many inches after feet"); 
    inches = keyboard.nextInt(); 
    double bmi = mass/(heightMeters * heightMeters); 

    System.out.println(mass); 
    System.out.println(bmi); 

    if(bmi < 18.5){ 
     System.out.println("Underweight"); 
    } 
    else if ((bmi >= 18.5) && (bmi < 25)){ 
     System.out.println("Normal weight"); 
    } 
    else if ((bmi >= 25) && (bmi < 30)) 
     System.out.println("Above weight"); 
    else 
     System.out.println("Obese"); 

    } 

} 
+1

请在此处询问之前尝试[鸭调试](http://www.rubberduckdebugging.com/)和其他基础知识。要求我们调试你的程序是完成任何事情的可怕方法。 – jdv

回答

1

了解你的变量,动态性质使用的feetinches电流值(在是0例如,当你键入

double heightMeters = ((feet * 12) + inches) * .0254;

该分配立即评估是很重要的在执行任何键盘输入之前)。要使用键盘输入的值执行这些计算,需要执行这些计算,并在键盘输入完成后将其结果分配给其相应变量,当前值为pounds,feetinches是您刚输入的值。由于heightMeters从其初始化仍然为零,并且自此以后未更改,因此您将得到零除。

0

你得到的异常,因为heightMeters的值是0浏览:

double bmi = mass/(heightMeters * heightMeters); 

是heightMeters计算唯一的一次,它的结果是0:

double heightMeters = ((feet * 12) + inches) * .0254; 

它看起来像你想用这个计算,所以我把它拆分成一个独立的功能:

public static double getHeightInMeters(int feet, int inches) 
{ 
    return 0.0254 * ((feet * 12) + inches); 
} 

的ñ您可以稍后调用它:

double heightMeters = this.getHeightInMeters(feet, inches); 
double bmi = mass/(heightMeters * heightMeters);