错误无法应用于给定类型

时间:2013-11-13 18:02:47

标签: java types arguments

代码:

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无法应用于给定类型。需要双倍,   没有发现任何争论。

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

2 个答案:

答案 0 :(得分:2)

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

如果priceprivate,那么您就这样致电getPrice()

wineCase1.getPrice();

这会返回double(假设price的类型为double)。

同样,如果priceprivate,那么您需要将其设置为:

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

答案 1 :(得分:1)

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

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

您不能为方法分配任何值,但方法可以返回值。