我试图使用传入的参数创建一个新对象,然后使用该新对象放置在下面列出的setCarColor方法中。但是我在构造函数中的setCarColor为我的clv变量给出了错误。它说“找不到符号”。 clv是我来自CarColor类的变量。我不确定是否是因为传入的参数(rdIn,grnIn,bluIn)是整数还是什么?请问有人有什么想法吗?

最好的祝福,

public abstract class Vehicle
{
  private String shapeId;
  CarColor carColor;//CarColor data member from the ColorValue.java class


public Shape(String bodyid, int rd, int grn, int ble)
{
 CarColor clv = new CarColor(rdIn, grnIn, bluIn);
 setCarColor(clv(rd, grn, ble));// <---error here
}

private CarColor getCarColor()
{
    return carColor;
}

private void setCarColor(int redIn, int blueIn, int greenIn)
{
if (redIn == 0 || blueIn == 0 || greenIn == 0 )
{
    System.out.println("The value entered in is null.  Please try again ");
    System.exit(-1);
}


}

最佳答案

这行几乎没问题:

ColorValue clv = new ColorValue(rdIn, grnIn, bluIn);


...尽管它没有填充colorValue字段(这可能是您期望的),并且实际上没有rdIngrnInbluIn变量。您是说rdgrnble吗? (顺便说一句,如果您不使用这样的名称,这会很有帮助。)

但是此行有两种中断方式:

setColorValue(clv(rd, grn, ble));


首先,它试图调用名为clv的方法。您没有这种方法。您有一个名为clv的变量,但没有“调用”一个变量。

第二个问题是,如果您真的要这样说:

setColorValue(clv);


那么您将使用不正确的参数-setColorValue没有类型为ColorValue的一个参数,它具有三个参数,均为int

不幸的是,您不清楚要做什么,因此很难建议您。也许你的意思是这样的:

public abstract class Geometry
{
    private String shapeId;
    private ColorValue colorValue;

    public Shape(String shapeId, int red, int green, int blue)
    {
        this.shapeId = shapeId;
        setColorValue(red, green, blue);
    }

    public ColorValue getColorValue()
    {
        return colorValue;
    }

    // Note the consistent order of the parameters - always red, green, blue.
    public void setColorValue(int red, int green, blue)
    {
        // Don't use System.exit() in the middle of a method! An exception
        // is the idiomatic way of reporting bad arguments.
        if (red == 0 || blue == 0 || green == 0)
        {
            throw new IllegalArgumentException("red green and blue must be non-zero");
        }
        colorValue = new ColorValue(red, green, blue);
    }
}

09-16 05:05