Java IF-ELSE IF-ELSE 跳过 if 和 else if 检查并自动打印出 else 语句

gal*_*324 0 java

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)

Era*_*ran 5

你的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该变量。