在java中的if语句中初始化变量?

时间:2013-03-07 15:49:18

标签: java if-statement joptionpane

我一直收到错误变量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);

6 个答案:

答案 0 :(得分:8)

您应该使用if / else而不是if / if here,以便编译器知道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);
}

答案 1 :(得分:2)

根据JLS

  

每个局部变量和每个空白的最终字段必须有一个明确的   在对其值进行任何访问时分配值。

此外还有§14.4.2

  

如果声明者没有初始化表达式,那么每个   对变量的引用必须先执行   分配给变量,或发生编译时错误。

使用那里的代码,可能在使用之前没有任何内容被分配给F3(在代码片段的最后一行)。

使用F3 = null

答案 2 :(得分:1)

您的代码相当于:

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

这应该会使错误消失。

答案 3 :(得分:0)

声明变量时,F3为其赋值null。由于您的if条件,可能存在不为此变量赋值的情况

答案 4 :(得分:0)

试试这个

Float F1=0,F2=0, F3=0;

答案 5 :(得分:0)

最好的方法是使用if-else语句,不要为变量赋值null。 If-else语句对于人类和编译器更好。分配null是没有意义的,并且使编译器无法检查未初始化的问题以供将来修改,如果不检查它,则可能会得到NullPointerException。