Java中未计算销售佣金
我遇到了一个非常简单的问题,让我发疯。我试图计算销售佣金并将其添加到a薪水中,但当我运行代码时,它总是给我0美元的佣金和0美元的报酬。以下是我迄今为止的代码:Java中未计算销售佣金,java,Java,我遇到了一个非常简单的问题,让我发疯。我试图计算销售佣金并将其添加到a薪水中,但当我运行代码时,它总是给我0美元的佣金和0美元的报酬。以下是我迄今为止的代码: package compensationcalculator; import java.text.NumberFormat; public class CompensationCalculator { private double salary = 75000; private double sales; p
package compensationcalculator;
import java.text.NumberFormat;
public class CompensationCalculator {
private double salary = 75000;
private double sales;
private double commission;
private double compensation;
public CompensationCalculator() {
this.salary = 75000.00;
}
public void setSales(double sales) {
this.sales = sales;
}
public double getCommission() {
this.commission = (sales * 0.2);
return commission;
}
public double getCompensation() {
this.compensation = (salary + commission);
return compensation;
}
public String toString() {
NumberFormat fmt = NumberFormat.getCurrencyInstance();
return ("Annual Salary: " + fmt.format(salary) + "\n"
+ "Total Sales: " + fmt.format(sales) + "\n"
+ "Total Commission: " + fmt.format(commission) + "\n"
+ "Total Annual Compensation: " + fmt.format(compensation));
}
}
现在,当我在提示输入销售时输入5000时,我会在它运行后得到以下回答:
Annual Salary: $75,000.00
Total Sales: $5,000.00
Total Commission: $0.00
Total Annual Compensation: $0.00
我确信这是一个简单的错误,但我已经有一段时间没有使用Java了。我将它与几年前的一些非常旧的代码进行了比较,看不出我遗漏了什么。欢迎任何指导 计算输出的方法不会被调用。更改toString()方法,如下所示:
return "Annual Salary: " + fmt.format(this.salary) + "\n" + "Total Sales: " + fmt.format(this.sales) + "\n"
+ "Total Commission: " + fmt.format(getCommission()) + "\n" + "Total Annual Compensation: "
+ fmt.format(getCompensation());
为了使方法能够工作,您必须实际调用该方法 试一试 调用变量本身不会导致调用getter方法。您需要确保调用
getCommission
和getCompensation
,以便设置成员变量
最简单的解决方法是在setSales
中设置这些变量,使它们始终保持一致
或者完全抛弃它们,因为它们可以根据需求进行计算
只需让
getwhater
返回一个计算变量,并确保toString
调用getwhater
以“打印”该值。补偿值基于佣金
,这是一个计算值
您需要在设置值时预先计算所有值,或者需要使用这些方法中的值,例如
预先计算的。。。
依赖项已计算。。。
这里的问题是,您的构造函数无法显式初始化几个字段,因此它们被初始化为默认值0,并且您从未调用计算它们的方法。(设计说明:您应该在构造函数中初始化它们,或者在没有成员变量的情况下延迟计算它们,或者延迟计算并缓存值,但是除非您正在缓存值,否则您真的不应该在getter中执行这样的赋值。您可能也不应该执行缓存方法,除非有充分的理由这样做o、 保持它的简单性,并且总是懒洋洋地计算结果,而不将值保存在成员中,或者总是在构造函数中初始化类似的内容)
然而,在这个问题上,我认为有必要指出,
double
和float
类型实际上是用于科学计算的,而不是用于货币用途。Double将根据二进制约定进行四舍五入,而对于currency,您确实希望严格按照十进制进行四舍五入。在Java中,您可以使用该类进行十进制计算。这是您的toString方法:
public String toString() {
NumberFormat fmt = NumberFormat.getCurrencyInstance();
return ("Annual Salary: " + fmt.format(salary) + "\n"
+ "Total Sales: " + fmt.format(sales) + "\n"
+ "Total Commission: " + fmt.format(getCommission()) + "\n"
+ "Total Annual Compensation: " + fmt.format(getCompensation()));
}
佣金和竞争变量未设置。发布您的主要方法。非常出色,我尝试了两种方法,它们都有效。现在我明白我做错了什么,谢谢。我知道我已经很久没有尝试Java了,但是这样一个简单的错误有点尴尬!再次感谢。@CameronBriggs别担心;)
public void setSales(double sales) {
this.sales = sales;
commission = sales * 0.2;
compensation = salary + commission;
}
public double getCommission() {
return commission;
}
public double getCompensation() {
return compensation;
}
public double getCompensation() {
this.compensation = (salary + getCommission());
return compensation;
}
public String toString() {
NumberFormat fmt = NumberFormat.getCurrencyInstance();
return ("Annual Salary: " + fmt.format(salary) + "\n"
+ "Total Sales: " + fmt.format(sales) + "\n"
+ "Total Commission: " + fmt.format(getCommission()) + "\n"
+ "Total Annual Compensation: " + fmt.format(getCompensation()));
}
public String toString() {
NumberFormat fmt = NumberFormat.getCurrencyInstance();
return ("Annual Salary: " + fmt.format(salary) + "\n"
+ "Total Sales: " + fmt.format(sales) + "\n"
+ "Total Commission: " + fmt.format(getCommission()) + "\n"
+ "Total Annual Compensation: " + fmt.format(getCompensation()));
}