0

基本的な重量計算機を作成しようとしていますが、「変数 weightOut が初期化されていない可能性があります」というエラーが発生しました。Google は、これは単に "= weightIn * .78" を設定するのではなく、"weightOut" を初期化する必要があるためであることを示しているようです。これは本当ですか?これが私のコードです。

 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

if-branchに入らない場合、変数はどのような値になりますか?

これを修正するには、最後に else-branch を追加します。

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

デフォルトの初期値を設定するのではなく、else-branch で値を設定すると、コンパイラーが満足するだけでなく、コンパイラーが不平を言っているエラーをコミットするのを防ぐことができます。 if ステートメントに正しい値が設定されていても、コンパイラからエラー メッセージが表示され、プログラムの実行時に予期しない結果が返されることはありません。

于 2013-07-17T06:40:06.743 に答える
2

Java メソッド/ローカル変数では、初期化する必要があります。初期化されていない変数は予期しない結果をもたらす可能性があるため、これが発生します。あなたのコードではweightOut、囲みif条件が満たされない場合、 の値は決して設定されません。次の変数をデフォルト値で初期化する必要があります。

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

ローカル変数は初期化しないと使えないので、「weightOut」を0に初期化する必要があります。あなたの場合のように、if条件で値を割り当てていますが、Javaではローカル変数の値が実行時に決定されるため、その値は無効です。それがあなたがエラーを起こしている理由です。

于 2013-07-17T07:19:29.353 に答える
0

惑星番号が0の場合は?

やったほうがいい:

double weightOut = 0;

于 2013-07-17T06:38:56.993 に答える