我正在尝试制作一个BMI计算器,它调用一个单独的类的方法来计算bmi,然后继续在main方法中。以下是我的源代码。
import java.util.Scanner;
public class testBMI
{
public static void main(String[] args)
{
String name;
double bmi;
String bmiClass;
char z;
Scanner readinput = new Scanner(System.in);
do
{
System.out.print("Please enter your name: ");
name = readinput.nextLine();
BMI.calculateBMI();
if (bmi < 18.5)
{
bmiClass = "(Underweight)";
}
else
if (bmi >= 18.5 && bmi <= 25)
{
bmiClass = "(Normal)";
}
else
if (bmi > 25.0 && bmi <= 30.0)
{
bmiClass = "(Overweight)";
}
else
bmiClass = "(Obese)";
System.out.println(name + ", your BMI is " +bmi+ "" +bmiClass+ ".");
System.out.print("Type Y or y to continue, or any other key to quit: ");
z = readinput.next().charAt(0);
} while (z == 'Y' || z == 'y');
}
}
另一堂课:
import java.util.Scanner;
public class BMI
{
public static void calculateBMI()
{
Scanner readinput = new Scanner(System.in);
double weight;
double height;
double newWeight;
double newHeight;
double bmi;
System.out.print("Please enter your weight in pounds: ");
weight = readinput.nextInt();
System.out.print("Please enter your height in inches: ");
height = readinput.nextInt();
newWeight = weight * 0.45359237;
newHeight = height * 0.0254;
bmi = newWeight/(newHeight*newHeight);
}
}
编译这些文件时,我成功编译了我的方法类(第二个片段),但在第一个文件中得到1个错误,其内容如下:
testBMI.java:21: error: variable bmi might not have been initialized
if (bmi < 18.5)
^
1 error
变量bmi显然是声明的,但初始化(添加到变量的实际值)发生在单独的方法中,但是,我不知道为什么main方法没有从第二个运行中识别它的初始化方法。请告诉我我做错了什么。
答案 0 :(得分:1)
您需要在BMI类中返回bmi的值。当你在testBMI类中检查bmi的值时,它只在你的BMI类中进行了本地初始化,而不是你的testBMI类。
答案 1 :(得分:0)
进行以下更改
1。来自public static void calculateBMI()
到public static double calculateBMI()
2。来自bmi = newWeight/(newHeight*newHeight);
到return newWeight/(newHeight*newHeight);
3.来自BMI.calculateBMI();
致bmi = BMI.calculateBMI();
答案 2 :(得分:0)
您的public static void calculateBMI()
方法应为public static double calculateBMI()
并返回bmi
变量。
接下来在main
方法中,在调用BMI.calculateBMI()
时,您应该将返回值分配给bmi
变量。
其余代码看起来不错。
您遇到的问题是变量的范围。 main
方法不知道来自bmi
类的BMI
变量,因为此变量(甚至与main
类中的变量命名相同)是本地的。
此外,您收到警告,因为已声明 bmi
变量,但已初始化。当您尝试检查语句if (bmi < 18.5)
时,您的程序&#34;不知道&#34; bmi
的价值是什么。