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

Java中nbYear函数while循环在percent为0时多计数问题求助

人口增长计算函数返回结果错误的原因分析与修复

问题原因

你的代码存在两个核心逻辑问题:

  1. 初始计算跳过了初始人口判断:你直接计算了第一年结束后的人口值,并将年份初始化为1,完全没考虑初始人口p0本身可能已经达标。
  2. 循环终止条件触发时机错误:当tmp恰好等于目标值p时,while (tmp<=p)的条件仍会成立,导致额外执行一次循环计算,年份多算1次。比如当tmp达到2000000时,循环会继续执行,计算出2010000,同时i从50变为51,这就是返回结果错误的直接原因。

修复后的代码

调整逻辑,从初始人口开始逐年计算,每次计算前判断当前人口是否达标,达标则直接返回年份:

public static int nbYear(int p0, double percent, int aug, int p) {
    // 初始人口已达标,直接返回0年
    if (p0 >= p) {
        return 0;
    }
    double currentPopulation = p0;
    int years = 0;
    while (currentPopulation < p) {
        // 计算当年结束后的人口
        currentPopulation = currentPopulation * (1 + percent / 100) + aug;
        years++;
    }
    return years;
}

测试验证

针对你提供的测试参数p0=1500000、percent=0.0、aug=10000、p=2000000:
初始人口1500000,每年固定新增10000,需要(2000000-1500000)/10000 = 50年即可达标。修复后的代码会在第50次循环后让人口达到2000000,此时退出循环返回50,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:40:23