我正在尝试构建一个基本的重量计算器并遇到“变量weightOut可能尚未初始化”错误。 Google似乎表明这是因为我需要初始化“weightOut”而不是仅仅将其设置为“= weightIn * .78”。这是真的?这是我的代码。
Scanner keyboard = new Scanner(System.in);
int weightIn, planetNumber;
double weightOut;
System.out.print("What is your weight? ");
weightIn = keyboard.nextInt();
System.out.println("I have information for the following planets: ");
System.out.println(" 1. Venus ");
...
System.out.print("What planet are you going to? ");
planetNumber = keyboard.nextInt();
if( planetNumber == 1 )
{
weightOut = weightIn * 0.78;
}
...
System.out.println("Your weight would be " + weightOut +
" on that planet.");
答案 0 :(得分:4)
本地变量未使用默认值初始化。应在使用前初始化本地变量。
double weightOut = 0.0;
如果if
语句在运行时从未真正执行过怎么办?编译器实际上担心,如果在运行时,本地变量无法获取值,并且您在其他地方使用它,它应该具有什么值,因为它没有默认值!
答案 1 :(得分:2)
在java方法/局部变量应该初始化。未初始化的变量可能会产生意外结果,因此会引发这种情况。在您的代码中,如果未满足封闭的weightOut
条件,则永远不会设置if
的值。您需要使用一些默认值初始化以下变量:
int weightIn = 0;
int planetNumber = 0;
double weightOut = 0.0d;
答案 2 :(得分:2)
如果不输入if-branch,变量会有什么值?
要解决此问题,请在结尾添加一个else分支:
if (...)
myVar = x;
else if (...)
myVar = z;
else
myVar = y;
在else-branch中设置值而不是设置一些默认初始值不仅会使编译器满意,而且还会阻止您提交编译器抱怨的错误:如果稍后您添加使用该代码的代码在if语句中设置正确值之前,变量仍会从编译器中获得错误消息,而不是运行程序时的意外结果。
答案 3 :(得分:2)
您需要将“weightOut”初始化为0,因为如果没有初始化,则无法使用局部变量。 在您的情况下,您将在if条件中分配值,并且该值无效,因为在运行时决定了本地变量的java值中的 。这就是你得到错误的原因。
答案 4 :(得分:0)
如果行星编号为0怎么办?
你应该这样做:
double weightOut = 0;