两个班级之间的糟糕操作数类型

时间:2014-04-08 18:30:57

标签: java

我试图对此进行编码,以便根据客户端有多少积分给我一定的折扣,当我尝试编译时,我得到错误的操作数类型错误,第一种类型:购买第二种类型:双倍,我无法理解为什么它不起作用,因为"价格"从班级购买,也是一个双,如果你可以帮助我,它会帮助很多!!感谢

public void makeAPurchase(Purchase price){
    if (points > 2000)
        price = price - (price * 0.05);

}  

购买类的一部分:

public class Purchase{
     private double price;

3 个答案:

答案 0 :(得分:0)

您将Price变量命名为与Price类的实例变量price相同 - 令人困惑。您的pricePurchase,而不是double,因此您无法使用*price实例vairable是私有的,所以无论如何你都不能从课外引用它。

Purchase中创建一个方法,以相应地调整price实例变量。然后,您可以在makeAPurchase中调用它。

答案 1 :(得分:0)

代码中的问题是您使用名为Purchase的{​​{1}}对象。如果你重命名变量以给它一个更好的名字,那么更容易看出这里有什么问题:

price

您无法在计算中使用public void makeAPurchase(Purchase purchase){ if (points > 2000) purchase = purchase - (purchase * 0.05); } 个对象。请注意,您也无法引用Purchase,因为它是私有的。这样的事情会起作用:

purchase.price

使用getter和setter总是有问题的,特别是在这种情况下。它隐藏了你的意图(不重要的)技术细节。在这种情况下,最好告诉购买对象该做什么。这将向每位读者展示您的代码的意图:

public void makeAPurchase(Purchase purchase){
    if (points > 2000)
        purchase.setPrice(purchase.getPrice() - (purchase.getPrice() * 0.05));
}

不,您可以改进代码中的其他名称,以使您的意图更加清晰:

public void makeAPurchase(Purchase purchase){
    if (points > 2000)
        purchase.applyDiscount(0.05);
}

//Part of Purchase.java
public class Purchase {
    //...
    public void applyDiscount(double discountPercent) {
        price = price - (price * discountPercent);
    }
}

您的代码显示的真实意图越多,您的名字越多,就越容易发现您所拥有的错误。

警告的最后一句:这不是问题的一部分,但是:不要使用浮点值(浮点数,双精度值)进行财务计算(除非您真的知道你在做什么。浮点值不精确,浮点数学显示一些令人惊讶的行为。您不希望在财务计算中使用此功能。看看BigDecimal(还要确保在使用之前知道自己在做什么)。

答案 2 :(得分:-1)

假设此方法在Purchase类中:

public void makeAPurchase(Purchase price){
    if (points > 2000)
        price = price - (price.price * 0.05);

}

为了更好地命名,请考虑将其更改为:

public void makeAPurchase(Purchase purchase){
    if (points > 2000)
        price = price - (purchase.getPrice() * 0.05);

}