我试图对此进行编码,以便根据客户端有多少积分给我一定的折扣,当我尝试编译时,我得到错误的操作数类型错误,第一种类型:购买第二种类型:双倍,我无法理解为什么它不起作用,因为"价格"从班级购买,也是一个双,如果你可以帮助我,它会帮助很多!!感谢
public void makeAPurchase(Purchase price){
if (points > 2000)
price = price - (price * 0.05);
}
购买类的一部分:
public class Purchase{
private double price;
答案 0 :(得分:0)
您将Price
变量命名为与Price
类的实例变量price
相同 - 令人困惑。您的price
是Purchase
,而不是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);
}