函数在打印时返回正确的值但断言失败

问题描述 投票:0回答:1

我需要为养老金计划编写代码。

主要功能是这样的

double pensionTarget = 240000;
double currentSaving = 0;
double annualSalary = 40000;
double monthlySaving = 0.1;
double interestRate = 0.04;

PensionPlanner fp = new PensionPlanner(pensionTarget, currentSaving,
        annualSalary, monthlySaving, interestRate);

System.out.println("Example: Test case 1 working months: " + fp.getWorkingMonth());
assert fp.getWorkingMonth() == 368: "Failed test case 1: Expected working months to be 368, but got " + fp.getWorkingMonth();

PensionPlanner 类中的 getWorkingMonth() 函数是这样的

public int getWorkingMonth() {
        double Saving = monthlySaving * (annualSalary / 12);
        int months = 0;
    
        while (currentSaving < pensionTarget) {
            currentSaving += Saving + (currentSaving * (interestRate / 12));
            months++;
        }
    
        return months;
    }

我一直没有通过断言测试。

我已经调试了代码并确保正确计算了值。在这一行的主要功能中,确实给出了预期的月数,

System.out.println("Example: Test case 1 working months: " + fp.getWorkingMonth());

但是断言失败,函数 getWorkingMonth() 在此行返回值 0

assert fp.getWorkingMonth() == 368: "Failed test case 1: Expected working months to be 368, but got " + fp.getWorkingMonth();

我不知道我做错了什么,希望得到任何帮助。

java class assert assertion
1个回答
0
投票

你正在修改方法中的实例字段

currentSaving
,所以第二次调用
getWorkingMonth()
将返回
0
.

如果您想要一致的结果,请避免这样做。您可以改用局部变量。

public int getWorkingMonth() {
    double Saving = monthlySaving * (annualSalary / 12);
    int months = 0;
    double curr = currentSaving;
    while (curr < pensionTarget) {
        curr += Saving + (curr * (interestRate / 12));
        months++;
    }
    return months;
}
© www.soinside.com 2019 - 2024. All rights reserved.