gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:42:38 29 4
gpt4 key购买 nike

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;
}



}

具有 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();

}
}

最佳答案

您的classifyBMI()方法创建一个新的 PersonWeight高度和体重保持不变0.0 ,所以你正在除 0.0通过0.0 ,结果为 NaN 。因此,没有一个比较的计算结果为 true ,最终会执行 else 子句。

您应该将该方法更改为实例方法(即不是 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);

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");
}
}

附注使用相同的标识符 - PersonWeight - 对于类名和变量名来说都是不好的做法。使用personWeight为变量。

关于Java IF-ELSE IF-ELSE 跳过 if 和 else if 检查并自动打印出 else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60246982/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com