You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

养老金计划代码:getWorkingMonth打印正确值但断言失败求助

问题原因分析

你的问题核心在于**getWorkingMonth()方法直接修改了类的实例变量currentSaving**:

  • 第一次调用方法时,循环会持续更新currentSaving,直到它达到或超过pensionTarget(此时currentSaving的值已经≥240000)。
  • 第二次调用方法时,currentSaving < pensionTarget的条件不成立,循环直接跳过,返回初始值0,导致断言失败。
解决方案

方案1:使用局部变量计算,不修改实例变量(推荐)

修改getWorkingMonth()方法,用局部变量保存初始储蓄值,避免修改类的实例状态,这样每次调用都会基于初始条件重新计算:

public int getWorkingMonth() {
    double monthlyContribution = monthlySaving * (annualSalary / 12);
    int months = 0;
    // 用局部变量存储初始储蓄,不改动实例变量currentSaving
    double tempSaving = currentSaving;
    
    while (tempSaving < pensionTarget) {
        tempSaving += monthlyContribution + (tempSaving * (interestRate / 12));
        months++;
    }
    
    return months;
}

方案2:重置实例状态后再调用(适合需要保留实例状态的场景)

如果你需要保留currentSaving的修改状态(比如模拟持续储蓄的流程),可以在第二次调用前重置currentSaving到初始值:

// 第一次调用
System.out.println("Example: Test case 1 working months: " + fp.getWorkingMonth());
// 重置储蓄值到初始状态(如果currentSaving是私有变量,需要添加setter方法)
fp.currentSaving = 0;
// 第二次调用
assert fp.getWorkingMonth() == 368: "Failed test case 1: Expected working months to be 368, but got " + fp.getWorkingMonth();

内容的提问来源于stack exchange,提问作者Vikraman Arumugam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:12:56