Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回无穷大作为BMI的Java GUI BMI计算器_Java - Fatal编程技术网

返回无穷大作为BMI的Java GUI BMI计算器

返回无穷大作为BMI的Java GUI BMI计算器,java,Java,我浏览了其他一些被问到的问题,但没有看到任何与我的确切问题有关的东西。问题是,我有一个JavaGUI BMI计算器,所有的东西都可以工作,除了我得到无限的BMI。奇怪的是,当我将输出语句包含到BMI中时,它在控制台上显示得很好。控制台和GUI计算器使用相同的hp.getBMI(),那么为什么一个会得到正确的输出,而另一个会显示无穷大呢。如果我的代码太草率,请原谅,这是我的第一个Java程序,我还没有完成编辑。提前谢谢 public class HealthProfile { priva

我浏览了其他一些被问到的问题,但没有看到任何与我的确切问题有关的东西。问题是,我有一个JavaGUI BMI计算器,所有的东西都可以工作,除了我得到无限的BMI。奇怪的是,当我将输出语句包含到BMI中时,它在控制台上显示得很好。控制台和GUI计算器使用相同的hp.getBMI(),那么为什么一个会得到正确的输出,而另一个会显示无穷大呢。如果我的代码太草率,请原谅,这是我的第一个Java程序,我还没有完成编辑。提前谢谢

public class HealthProfile 
{
    private int age;
    private double height, heightFt, heightIn, weight, BMI, maxHR;
    private String name, category;

    //parameterized constructor
    public HealthProfile(String name, int age, double heightFt, double heightIn, double weight)
    {
        this.name = name;
        this.age = age;
        this.heightFt = heightFt;
        this.heightIn = heightIn;
        this.weight = weight;

    }
    //default constructor
    public HealthProfile()
    {
        this("",0,0,0,0);
    }

    public double getHeight()
    {
        height = heightIn + heightFt * 12;  
        return height;
    }
    public double getBMI()
    {
        BMI = weight * 703 / (height * height);
        return BMI;
    }

    public double getMaxHR()
    {
        maxHR = 220 - age;
        return maxHR;
    }
    public String getCategory()
    {
        if (BMI < 18.5)
            category = "Underweight";
        else if (BMI >= 18.5 && BMI <= 24.9)
            category = "Normal";
        else if (BMI >= 25 && BMI <= 29.9)
            category = "Overweight";
        else
            category = "Obese";
        return category;
    }

}
主类,它只是运行GUI

public class HealthProfileMain {

    public static void main(String[] args) 
    {
        HealthProfile_GUI hp = new HealthProfile_GUI();
    }
}
方法
getBMI()
不计算高度:它仅由
getHeight()
设置,在第一次调用
getBMI()
之前不会调用它

也就是说,事件侦听器正确读取
heightFt
heightIn
值,但
height
仍然为零。每次阅读
heightFt
heightIn
时,最好也更新
heightIn


因此,对
getBMI()
的第一次调用产生一个被零除的除法(因此是无穷大,因为这在Java浮点中不是一个错误),而对
getBMI()
的第二次调用获得了正确的
高度值,因此得到了正确的结果。

当您第一次调用getBMI()时,高度还没有被设置。但是在第二次调用之前,您调用了getHeight(),它为height设置了正确的值。

默认构造函数将所有值都设置为0这一事实很奇怪。为什么要有默认构造函数?另外,在if语句中,如果(someVar==true)
if
someVar
是布尔值,则不需要执行
if(someVar==true)
。只要做
if(someVar)
这能回答你的问题吗?是的,就是这样。我假设只要
HeightFt
HeightIn
将值传递给
Height
,就可以随时调用
getBMI()
方法来检索
BMI
。非常感谢。
public class HealthProfileMain {

    public static void main(String[] args) 
    {
        HealthProfile_GUI hp = new HealthProfile_GUI();
    }
}