0

我正在尝试构建一个基本的重量计算器并遇到“变量 weightOut 可能尚未初始化”错误。谷歌似乎表明这是因为我需要初始化 "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.");
4

5 回答 5

4

局部变量不使用默认值初始化。局部变量应在使用前初始化。

double weightOut = 0.0;

如果if语句在运行时从未真正执行过怎么办?编译器实际上担心,如果在运行时局部变量无法获取值并且您在其他地方使用它,它应该给它的值没有默认值!

于 2013-07-17T06:37:15.997 回答
2

在 java 方法/局部变量应该被初始化。未初始化的变量可能会产生意想不到的结果,因此会引发这种情况。在您的代码中,如果不满足weightOut封闭条件,则永远不会设置的值。if您需要使用一些默认值初始化以下变量:

  int weightIn = 0;
  int planetNumber = 0;
  double weightOut = 0.0d;
于 2013-07-17T06:38:17.343 回答
2

如果不输入if-branch,变量会有什么值?

要解决此问题,请在末尾添加一个 else-branch:

if (...)
    myVar = x;
else if (...)
    myVar = z;
else
    myVar = y;

在 else 分支中设置值而不是设置一些默认初始值不仅使编译器高兴,而且还可以防止您提交编译器抱怨的错误:如果稍后您添加在其之前使用变量的代码如果在 if 语句中设置了正确的值,您仍然会从编译器收到错误消息,而不是在运行程序时出现意外结果。

于 2013-07-17T06:40:06.743 回答
2

您需要将“weightOut”初始化为0,因为没有初始化就不能使用局部变量。在您的情况下,您在 if 条件中分配值并且该值无效,因为在 java 中,局部变量的值是在运行时决定的。这就是你出错的原因。

于 2013-07-17T07:19:29.353 回答
0

如果行星编号为0怎么办?

你应该做:

双重量输出 = 0;

于 2013-07-17T06:38:56.993 回答