Java中nbYear函数while循环在percent为0时多计数问题求助
人口增长计算函数返回结果错误的原因分析与修复
问题原因
你的代码存在两个核心逻辑问题:
- 初始计算跳过了初始人口判断:你直接计算了第一年结束后的人口值,并将年份初始化为1,完全没考虑初始人口
p0本身可能已经达标。 - 循环终止条件触发时机错误:当
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
相关产品推荐
相关产品推荐

