1

エラー変数F3が表示され続けるコードの最後の行で、初期化されていない可能性があります。

私は何が間違っているのですか?

{
    Float F1,F2, F3;

    F1 = Float.parseFloat(
      JOptionPane.showInputDialog("Enter a number and press ok."));


    F2 = Float.parseFloat(
      JOptionPane.showInputDialog("Enter a second number and press ok."));

    if(F1 >= F2)
    {

      F3=(F1 * F2) + (F1 * 2);
    }
    if(F2 >= F1)
    {
      F3 =(F1 + F2) + (F2 * 5);
    }

     DecimalFormat dec = new DecimalFormat("##.##");


  JOptionPane.showMessageDialog(null,"Your calculations are:" +(F3),"Caculations", JOptionPane.INFORMATION_MESSAGE);
4

6 に答える 6

8

ここでは、if/if の代わりに if/else を使用して、F3常に値が設定されることをコンパイラが認識できるようにする必要があります。

次のコードは、if/if ステートメントと同等です。

if(F1 > F2) //The = here will always be overridden by the other if clause in your original statement so it's redundant.
{ 
  F3=(F1 * F2) + (F1 * 2);
}
else
{
  F3 =(F1 + F2) + (F2 * 5);
}
于 2013-03-07T15:51:19.777 に答える
3

JLSによると:

各ローカル変数とすべての空白の最終フィールドには、その値へのアクセスが発生したときに、確実に値が割り当てられている必要があります。

さらに§14.4.2から:

宣言子に初期化式がない場合、変数へのすべての参照の前に、変数への代入を実行する必要があります。そうしないと、コンパイル時エラーが発生します。

F3そこにあるコードでは、(コード スニペットの最後の行で) 使用される前に何も割り当てられない可能性があります。

を使用しF3 = nullます。

于 2013-03-07T15:52:13.873 に答える
1

あなたのコードは以下と同等です:

if(F1 > F2) {
  F3 = (F1 * F2) + (F1 * 2);
} else {
  F3 = (F1 + F2) + (F2 * 5);
}

これにより、エラーが解消されるはずです。

于 2013-03-07T15:52:38.013 に答える
0

これを試して

Float F1=0,F2=0, F3=0;
于 2013-03-07T15:53:16.097 に答える
0

最善の方法は、if-else ステートメントを使用し、変数に null を割り当てないことです。If-else ステートメントは、人間とコンパイラにとって優れています。null を割り当てることは無意味であり、将来の変更のためにコンパイラが初期化されていない問題をチェックできなくなり、チェックしないと NullPointerException が発生する可能性があります。

于 2015-11-25T08:08:12.757 に答える
0

変数を宣言するときは、F3 で null を割り当てます。あなたのif条件のために、この変数に値が割り当てられない場合があるかもしれません

于 2013-03-07T15:51:42.050 に答える