变量尚未初始化

时间:2015-07-22 14:59:23

标签: java

public class Color
{
private int red;
private int green;
private int blue;

/**
 * Turns this color into the equivalent gray value.
 */
public void turnGray()
{
    int red = (int)(0.2126*red + 0.7152*green + 0.0722*blue);
    int green = red;
    int blue = red;

}

当我尝试编译时,程序返回变量red可能尚未初始化。为什么这段代码不能重新分配红色到等式的lhs上的值?

2 个答案:

答案 0 :(得分:1)

int red = (int)(0.2126*red + 0.7152*green + 0.0722*blue);

在上面一行中,您尝试根据redredgreen的值为blue分配值。由于之前未初始化红色,因此会出现错误。

事实上,正如评论中指出的那样,没有一个变量被初始化。

此外,您将在方法中重新声明具有相同名称的变量。您可以将其更改为如下所示的内容,但我不确定所使用的逻辑。因此,您可以自行决定做出正确的更改。

public class Color
{
private double red = 1;
private double green = 1;
private double blue = 1;

/**
 * Turns this color into the equivalent gray value.
 */
public void turnGray()
{
    red = 0.2126*red + 0.7152*green + 0.0722*blue;
    green = red;
    blue = red;
}

请注意,变量类型已更改为double,因为int不支持分数。

答案 1 :(得分:1)

您正在将redgreenblue变量重新声明为方法中的局部变量,隐藏具有相同名称的实例变量。局部变量没有默认值,在初始化之前无法访问。

由于您的实例成员具有相同的名称,我假设您打算使用它们:

public void turnGray()
{
    red = (int)(0.2126*red + 0.7152*green + 0.0722*blue);
    green = red;
    blue = red;
}

在此代码中,使用实例变量。现在,我希望你在一些你没有告诉我们的代码中初始化这些变量。否则,它们的默认值为0,执行turnGray时将保持为零。