从步数数组获取最长达标连续序列的Java代码问题排查
修复最长达标连续步数序列的Java代码错误
原代码核心问题
- 完全错误的判断逻辑:原代码用循环索引
i和达标步数goalByStepsPerDay比较,根本没访问步数数组days的元素,导致只要循环索引小于等于达标值,就会一直累加计数,最终输出数组长度(即月份天数)。 - 计数更新顺序错误:
currentSeries++ > finalSeries是先比较再自增,会导致连续天数的计数少算一天,逻辑顺序颠倒。
修正后的代码
方案一:增强for循环(更简洁)
void bestSeries(int goalByStepsPerDay) { int currentSeries = 0; int finalSeries = 0; // 遍历每日步数数组 for (int dailySteps : days) { // 判断当天步数是否超过达标值 if (dailySteps > goalByStepsPerDay) { currentSeries++; // 更新最长连续达标天数 if (currentSeries > finalSeries) { finalSeries = currentSeries; } } else { // 未达标,重置当前连续计数 currentSeries = 0; } } System.out.println("最长达标连续天数:"); System.out.println(finalSeries); }
方案二:普通for循环(保留索引访问)
void bestSeries(int goalByStepsPerDay) { int currentSeries = 0; int finalSeries = 0; for (int i = 0; i < days.length; i++) { // 取出当前索引对应的每日步数 int dailySteps = days[i]; if (dailySteps > goalByStepsPerDay) { currentSeries++; if (currentSeries > finalSeries) { finalSeries = currentSeries; } } else { currentSeries = 0; } } System.out.println("最长达标连续天数:"); System.out.println(finalSeries); }
修正说明
- 直接访问
days数组中的每日步数元素,替换原代码中错误的索引判断逻辑; - 调整计数顺序:达标时先累加当前连续天数,再更新最长序列记录,避免计数遗漏;
- 未达标时重置当前连续计数,正确断开连续序列。
内容的提问来源于stack exchange,提问作者Chernosmaga
相关产品推荐
相关产品推荐

