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/else 而不是 if/if,以便编译器知道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

当您声明一个变量时,F3 将 null 分配给它。由于您的 if 条件,可能存在不会为该变量分配任何值的情况

于 2013-03-07T15:51:42.050 回答
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 回答