我一直得到
BigDecimal类型中的方法add(BigDecimal)不适用于参数(pay)"
以下代码出错。
作为参考,我已将pay
类保存在单独的文件中,我也导入BigDecimal
。
你们当中有人想指出我缺乏/误解的地方吗?我试图找到解决方案,但我找不到任何东西。
import java.util.Scanner;
import java.math.BigDecimal;
class SalesPreInt {
public static void main(String[] args) {
Pay pay = new Pay();
pay.basePay();
BigDecimal intCalc = new BigDecimal("0.15");
Scanner userInput = new Scanner(System.in);
System.out.println("What were your total sales?");
BigDecimal salesPre = userInput.nextBigDecimal();
System.out.println("You're Total Sales were "+salesPre);
userInput.close();
BigDecimal postIntCalc = salesPre.multiply(intCalc);
BigDecimal salesCom = postIntCalc.add(salesPre);
int finalCalc = salesCom.add(pay);
System.out.println("Your total sales including commission is "+salesCom);
System.out.println("Your total pay is"+finalCalc);
}
}
下面的pay.java文件:
import java.math.BigDecimal;
public class Pay {
public void basePay() {
int basePay = 50000;
BigDecimal bd = new BigDecimal(String.valueOf(basePay));
}
}
答案 0 :(得分:0)
如果你希望Pay类返回一个basePay值,你需要一个合适的方法,即一个实际返回值的方法,即不是void方法。
public class Pay {
private int basePay = 50000;
public BigDecimal getBasepay() {
// no need to pass via strings, BigDecimal has a constructor that takes an int value
BigDecimal bd = new BigDecimal(basePay);
return bd;
}
}
将被称为
int finalCalc = salesCom.add(pay.getBasepay()).intValue();
因为您希望将结果存储为整数或
BigDecimal finalCalc = salesCom.add(pay.getBasepay());
请注意,我将basePay(值)声明为Pay类的私有成员,并将方法重命名为get(在Java中称为getter,按照惯例,它们的名称以get为前缀)。如果有一天你需要一种修改该值的方法,只需添加一个setter
public void setBasepay(int bp) {
basePay = bp;
}
也许您还希望能够将值直接设置为BigDecimal,尽管它存储为int?只需添加
public void setBasepay(BigDecimal bp) {
basePay = bp.intValue();
}
两个具有相同名称但其他参数的方法称为重载,这是一种常用的机制,可以在程序中引入灵活性和多功能性。
我还建议您查看一个好的教程,official one by Oracle非常好(并且免费:))
答案 1 :(得分:0)
正如错误消息所示,add
BigDecimal
方法BigDecimal
只有一个参数需要Pay
个实例:[javaDoc]
public BigDecimal add(BigDecimal augend)
返回一个BigDecimal,其值为(this + augend),其比例 是max(this.scale(),augend.scale())。
<强>参数:强>
augend - 要添加到此BigDecimal的值。<强>返回:强>
this + augend
您已将Pay
类型的变量传递给此方法,由于BigDecimal
不是add
的子类型,因此与它无关。方法Pay
无法知道如何添加basePay
实例,编译器会抱怨该参数类型。
您可以执行以下修复,以绕过该问题:
您的BigDecimal
方法会创建salesCom
,我想这是您要添加到public BigDecimal basePay() {
int basePay = 50000;
return new BigDecimal(String.valueOf(basePay));
}
的方法,所以请稍微改变一下这个方法:
BigDecimal
此方法现在创建一个add
并将其返回给调用方法。现在更改basePay
方法调用以使用int finalCalc = salesCom.add(pay.basePay());
方法:
add
现在只剩下一个问题了。正如您在上面发布的JavaDoc中所看到的,BigDecimal
返回一个新的finalCalc
实例,但您将返回的值分配给变量int
,其类型为BigDecimal
}。所以我们需要将其更改为BigDecimal finalCalc = salesCom.add(pay.basePay());
:
mycookies
现在您的代码已编译,它应该按预期工作。