Java 11.6 在这个 BMI 计算器中,它将计算人的体重、身高并计算 BMI。BMI 计算正确,但是在分类 BMI 方法中,程序跳过if 和 else if检查,只打印出每次测试“肥胖”的 else 语句。循环执行不正确吗?或者 BMI 的值不在循环中启动。当我打印出 BMI 时,我确实看到每次测试的 BMI 都会发生变化,因此这不是问题。
PersonWeight.java 类
import java.time.Year;
public class PersonWeight {
private double height;
private double weight;
public PersonWeight() {
height = 0;
weight = 0;
}
public PersonWeight(double h, double w) {
height = h;
weight = w;
}
public void setHeight(double h) {
this.height = h;
}
public double getHeight() {
return height;
}
public void setWeight(double w) {
this.weight = w;
}
public double getWeight() {
return weight;
}
public double ComputeBMI() {
double bmi = ((weight)/(height*height));
return bmi;
}
}
Run Code Online (Sandbox Code Playgroud)
具有 main 方法的测试类
import java.util.Scanner;
public class TestPersonWeight {
public static void classifyBMI() {
PersonWeight PersonWeight = new PersonWeight();
double bmi = PersonWeight.ComputeBMI();
if(bmi<18.5) {
System.out.printf("Underweight");
}else if (bmi >= 18.5 && bmi<25) {
System.out.printf("Normal Weight");
}else if (bmi >=25 && bmi<30) {
System.out.printf("Overweight");
}else {
System.out.printf("Obese");
}
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
TestPersonWeight TestPersonWeight = new TestPersonWeight();
PersonWeight PersonWeight = new PersonWeight()
System.out.printf("Enter person's Height in Meters: ");
double h = input.nextDouble();
PersonWeight.setHeight(h);
System.out.printf("Enter person's Weight in Kilograms: ");
double w = input.nextDouble();
PersonWeight.setWeight(w);
PersonWeight.ComputeBMI();
System.out.printf("%n Height: " + PersonWeight.getHeight());
System.out.printf("%n Weight: " + PersonWeight.getWeight());
System.out.printf("%n BMI: " + PersonWeight.ComputeBMI());
classifyBMI();
}
}
Run Code Online (Sandbox Code Playgroud)
你的classifyBMI()方法创建一个新PersonWeight地方的身高和体重保持0.0,所以你将0.0通过0.0,其结果NaN。因此,没有任何比较的计算结果为true,并且您最终会执行 else 子句。
您应该将该方法更改为实例方法(即 not static),并为PersonWeight您在main方法中创建的实例调用它。
或者,作为替代方案,保留该方法static,但将先前计算的bmi值传递给它。
即在你main写的:
double bmi = PersonWeight.ComputeBMI();
System.out.printf("%n Height: " + PersonWeight.getHeight());
System.out.printf("%n Weight: " + PersonWeight.getWeight());
System.out.printf("%n BMI: " + bmi);
classifyBMI(bmi);
Run Code Online (Sandbox Code Playgroud)
并classifyBMI成为:
public static void classifyBMI (double bmi) {
if(bmi < 18.5) {
System.out.printf("Underweight");
} else if (bmi >= 18.5 && bmi < 25) {
System.out.printf("Normal Weight");
} else if (bmi >= 25 && bmi < 30) {
System.out.printf("Overweight");
} else {
System.out.printf("Obese");
}
}
Run Code Online (Sandbox Code Playgroud)
PS 使用相同的标识符 - PersonWeight- 对于您的类名和变量名是一种不好的做法。使用personWeight该变量。