Java中未计算销售佣金

Java中未计算销售佣金,java,Java,我遇到了一个非常简单的问题,让我发疯。我试图计算销售佣金并将其添加到a薪水中,但当我运行代码时,它总是给我0美元的佣金和0美元的报酬。以下是我迄今为止的代码: package compensationcalculator; import java.text.NumberFormat; public class CompensationCalculator { private double salary = 75000; private double sales; p

我遇到了一个非常简单的问题,让我发疯。我试图计算销售佣金并将其添加到a薪水中,但当我运行代码时,它总是给我0美元的佣金和0美元的报酬。以下是我迄今为止的代码:

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

}