2012-05-17 142 views
1

我有一个转换程序下面的代码:变量可能未被初始化?

private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) { 

    int type, value; 
    double conversion; 
    String output; 

    type = Integer.parseInt(conversionchoiceInput.getText()); 
    value = Integer.parseInt(valueInput.getText()); 

    if (type == 1) 
    { 
    conversion = inchesToCentimetres(value); 
    output = value + " inches = " + Math.round(conversion) + " centimetres"; 
    } 
    else if (type == 2) 
    { 

    } 
    else if (type == 3) 
    { 

    } 
    else if (type == 4) 
    { 

    } 
    outputLabel.setText(output); 
} 

它说:“可变输出可能尚未initiaized”时,我已经有了?

谢谢!

+0

当你写'String output;'你是_declaring_'输出'。当你写'String output =“”;'(或任何值。“”仅仅是一个例子)时,你就是_initialising_。 – Tharwen

+0

通常,分离变量的声明和初始化(类型,值)是一个坏主意。如果可能的话,在初始化时声明它们。只有必要时才分割它们(例如,在try/catch-block之前)。 –

回答

4

问题是output需要被初始化,不管程序执行的路径是什么。它仅在if路径中初始化。因此,你需要在开始时给它一个默认值(空字符串或者其他),或者在所有分支中设置它。

String output = ""; 

if (type == 1) 
{ 
    conversion = inchesToCentimetres(value); 
    output = value + " inches = " + Math.round(conversion) + " centimetres"; 
} 
else if (type == 2) 
{ 
    output = ""; 
} 
else if (type == 3) 
{ 
    output = ""; 
} 
else if (type == 4) 
{ 
    output = ""; 
} 

当然,第一个选项是最好的。

+0

你也可以用最常见的值初始化它,这样你就不必检查if语句中最常见的选项,只需检查其他语句。 –

0

如果输入!= 1,则输出不会被初始化。即使您在每个分支(1,2,3,4)中给出输出值,输出可能尚未初始化,就好像键入< 1或> 4,但它仍然没有值。

0

您刚刚声明了与初始化变量不同的变量。