Java 体重指数计算器NaN输出

Java 体重指数计算器NaN输出,java,Java,我最近刚开始用Java编写代码,按照教授的要求使用记事本,并被要求创建BMI计算器(我以前用C++编写过)。然而,尽管我的类和驱动程序都进行了编译,而且我没有看到任何错误,但程序输出在应该返回浮点值时返回'NaN'。谁能告诉我哪里出了问题?该类的代码: import java.util.Scanner; public class BMICalculator { Scanner input = new Scanner(System.in); float weight; fl

我最近刚开始用Java编写代码,按照教授的要求使用记事本,并被要求创建BMI计算器(我以前用C++编写过)。然而,尽管我的类和驱动程序都进行了编译,而且我没有看到任何错误,但程序输出在应该返回浮点值时返回'NaN'。谁能告诉我哪里出了问题?该类的代码:

import java.util.Scanner;
public class BMICalculator
{
    Scanner input = new Scanner(System.in);
    float weight;
    float height;
    float bmi;
    public float calculateBMI()
    {
        bmi = (weight / (height * height)) * 703;
    }
    public void setWeight(float aWeight)
    {
        weight = aWeight;
    }
    public void setHeight(float aHeight)
    {
        height = aHeight;
    }
    public float getWeight()
    {
        return weight;
    }
    public float getHeight()
    {
        return height;
    }
    public float getBMI()
    {
        return bmi;
    }
    public void ask()
    {
        System.out.print("Enter a weight in pounds: ");
        weight = input.nextFloat();
        System.out.print("Enter a height in inches: ");
        height = input.nextFloat();
        calculateBMI();
    }
    public void show()
    {
        System.out.println();
        System.out.println("Body Mass Index: " + bmi);
        if (bmi <= 0)
        {
            System.out.println("Something went wrong...");
        }
        else if (bmi >= 1.0 && bmi < 18.5)
        {
            System.out.println("Underweight.");
        }
        else if (bmi >= 18.5 && bmi < 25.0)
        {
            System.out.println("Normal weight.");
        }
        else if (bmi >= 25.0 && bmi < 30.0)
        {
            System.out.println("Overweight.");
        }
        else if (bmi >= 30.0)
        {
            System.out.println("Obese.");
        }
    }
}

代码在我看来很好,如果只使用类方法设置变量,为什么还要编写setter呢?还为
calculateBMI
函数添加了作为float的返回类型,但不返回任何内容。你也可以添加主方法吗?因此,我们可以确定问题的确切根源。代码运行良好,经过测试。正如@Sandeep Kokate所说,您的calculateBMI返回一个浮点值,但您所做的只是分配bmi变量。将函数更改为返回void。您没有向我们展示如何运行代码(main)。请张贴完整的代码!如果您正在使用记事本++并在命令提示符下运行java程序,则
javac bmiculatordriver.java
应该会给出编译时错误,因为
calculateBMI
函数缺少返回语句,将返回类型更改为void,因为您没有从该函数返回任何内容,或者只返回
bmi
使程序工作!我将calculateBMI函数的返回类型更改为void,并在Eclipse上对其进行了测试。谢谢大家!代码在我看来很好,如果只使用类方法设置变量,为什么还要编写setter呢?还为
calculateBMI
函数添加了作为float的返回类型,但不返回任何内容。你也可以添加主方法吗?因此,我们可以确定问题的确切根源。代码运行良好,经过测试。正如@Sandeep Kokate所说,您的calculateBMI返回一个浮点值,但您所做的只是分配bmi变量。将函数更改为返回void。您没有向我们展示如何运行代码(main)。请张贴完整的代码!如果您正在使用记事本++并在命令提示符下运行java程序,则
javac bmiculatordriver.java
应该会给出编译时错误,因为
calculateBMI
函数缺少返回语句,将返回类型更改为void,因为您没有从该函数返回任何内容,或者只返回
bmi
使程序工作!我将calculateBMI函数的返回类型更改为void,并在Eclipse上对其进行了测试。谢谢大家!
public class BMICalculatorDriver
{
    public static void main(String [] args)
    {
        BMICalculator userBMI = new BMICalculator();
        userBMI.ask();
        userBMI.show();
    }
}