我需要为养老金计划编写代码。
主要功能是这样的
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();
我不知道我做错了什么,希望得到任何帮助。
你正在修改方法中的实例字段
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;
}