有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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可能没有初始化。为什么这个代码不将红色重新指定给等式左侧的值


共 (2) 个答案

  1. # 1 楼答案

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

    在上面的一行中,您正试图根据redgreenblue的值为red赋值。由于之前未初始化red,因此会出现错误

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

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

    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不支持分数

  2. # 2 楼答案

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

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

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

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