Java 变量尚未初始化

Java 变量尚未初始化,java,Java,当我试图编译这个时,程序返回的变量red可能没有初始化。为什么这个代码不将红色重新指定给等式左侧的值 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.715

当我试图编译这个时,程序返回的变量red可能没有初始化。为什么这个代码不将红色重新指定给等式左侧的值

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,因此会出现错误

事实上,正如注释中指出的,没有一个变量是初始化的

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

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

请注意,由于
int
不支持分数,因此变量类型更改为
double

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

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

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;
}

在这段代码中,使用了实例变量。现在,我希望您能在一些没有向我们展示的代码中初始化这些变量。否则,它们将有一个默认值0,当您执行
turnGray

int red=0.2126*red[…]
当red尚未初始化时,您希望输出什么?如果我从底部3个方程的所有rhs中删除初始int,它会工作,但为什么??
private int red,将默认为0。但是,您在方法中将
red
重新声明为局部变量,在初始化之前无法访问该变量,因此我认为您混淆了“right”和“left”:^)这是正确的。请注意,在进行必要的更正后,
red
的值将是
1
0
。因此,
绿色
蓝色
的值也会随之改变。最后,您的颜色将显示为rgb(0,0,0)或rgb(1,1,1)。
public void turnGray()
{
    red = (int)(0.2126*red + 0.7152*green + 0.0722*blue);
    green = red;
    blue = red;
}