变量未初始化 - 我必须设置一个变量,而不是只在if语句中添加它吗?

时间:2013-07-17 06:36:18

标签: java variables initialization

我正在尝试构建一个基本的重量计算器并遇到“变量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.");

5 个答案:

答案 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;