【问题标题】:Error Cannot be applied to given types错误不能应用于给定类型
【发布时间】:2013-11-13 18:02:46
【问题描述】:

代码:

public void checkHitDiscount(WineCase wineCase1)
{
    if(hits%10==0)
    {   
        wineCase1.setPrice()=0.9*wineCase1.getPrice;
        System.out.println("Congratulations! You qualify for 10% discount.");
    } else 
        System.out.println("You do not qualify for discount.");
}

我在这里得到的错误是:

方法 setPrice 不能应用于给定类型。需要双倍, 找不到任何论据。

我正在尝试修改 WineCase 类中的 price 字段。是双份的。

【问题讨论】:

  • 试试wineCase1.setPrice(0.9*wineCase1.getPrice()); 你需要向方法传递一个双参数,但实际上你什么也没传递。
  • 您可以为您的setPrice() 方法发布代码吗?

标签: java types arguments


【解决方案1】:

setPrice() 是一种方法。您似乎也有一个名为getPrice() 的方法,这两者可能都对应于您的对象中名为price 的实例变量。

如果price 是private,那么您就这样调用getPrice():

wineCase1.getPrice();

这会返回一个double(假设price 是双精度类型)。

同样,如果 price 是 private,那么您需要这样设置:

wineCase1.setPrice(somePrice);

所以在你上面的例子中,如果你想将 price 设置为它当前的 90%,正确的语法应该是这样的:

wineCase1.setPrice(0.9*wineCase1.getPrice());

或者,您可以为此类编写一个public 方法,如下所示:

public void discountBy(double disc) {
    price *= 1.0 - disc;
}
// or like this:
public void discountTo(double disc) {
    price *= disc;
}
// or both...

要使用此方法并对wineCase1 应用 10% 的折扣,您可以这样做:

wineCase1.discountBy(0.1);
// or like this:
wineCase1.discountTo(0.9);

那么你仍然会使用:

wineCase1.getPrice();

从对象中检索私有变量price。


最后,这可能是最好的解决方案,添加这些方法:

public double getPriceDiscountedBy(double disc) {
    return price*(1.0-disc);
}

public double getPriceDiscountedTo(double disc) {
    return price*disc;
}

这些方法将允许您在不更改商品原始价格的情况下检索折扣价的价值。这些将在您获得getPrice 的相同位置调用,但使用折扣参数仅修改返回的价格。例如:

double discountedPriceOutsideOfObject = wineCase1.getPriceDiscountedTo(0.9);
//or like this:
double discountedPriceOutsideOfObject = wineCase1.getPriceDiscountedBy(0.1);

【讨论】:

    【解决方案2】:

    如果价格字段是双精度类型,那么您只需执行以下操作。

    public void checkHitDiscount(WineCase wineCase1)
    {
        if(hits%10==0)
        {   
            wineCase1.setPrice(0.9*wineCase1.getPrice());
            System.out.println("Congratulations! You qualify for 10% discount.");
        } else 
            System.out.println("You do not qualify for discount.");
    }
    

    在 WineCase.java 中,setPrice 必须如下所示。

    pubilc void setPrice(double price) {
      this.price = price;
    }
    

    你不能给方法赋值,但是方法可以返回值。

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多