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

两段Java选数算法仅if块范围不同输出结果不同的原因求解

两段代码结果差异的核心原因

两段代码唯一的区别是counter变量的重置逻辑:

  • 第一段代码:每次外层i循环遍历完所有j后,无论counter > max的条件是否成立,都会强制把counter重置为0,保证每一轮i对应的匹配计数都是独立计算的。
  • 第二段代码:仅当counter > max条件成立时,才会重置counter;如果条件不成立,counter会保留上一轮i循环的计数结果,和当前轮的计数累加,最终导致计数偏大。

用题目示例复现错误过程

示例输入排序后为[1,1,2,2,4,4,5,5,5],第二段代码执行流程如下:

  1. i=0时,内层循环统计到符合条件的j共3个,counter=3,满足3>0,max更新为3,counter重置为0。
  2. i=1时,内层循环统计到符合条件的j共2个,counter=2,不满足2>3,counter没有重置,保留值2。
  3. i=2时,内层循环统计到符合条件的j共1个,counter=2+1=3,不满足3>3,counter保留值3。
  4. i=3时,内层循环没有符合条件的j,counter=3+0=3,不满足3>3,counter保留值3。
  5. i=4时,内层循环统计到符合条件的j共4个,counter=3+4=7,满足7>3,max更新为7,counter重置为0。
  6. 后续循环的counter都不会超过7,最终返回7+1=8,和正确结果5完全不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:18:03