
使用取模运算(%)可优雅实现循环计数:将原始索引映射到 1–25 的周期序列,避免手动重置导致的无限循环或逻辑错误。
使用取模运算(%)可优雅实现循环计数:将原始索引映射到 1–25 的周期序列,避免手动重置导致的无限循环或逻辑错误。
在 Java 中,for 循环的控制变量(如 i)由循环结构自动递增,不能在循环体内直接将其“重置为 1”并期望继续正常执行——因为下一次迭代仍会执行 i++,极易引发逻辑混乱(例如跳过值、死循环或越界)。因此,正确的做法是分离“循环步进逻辑”与“业务所需值逻辑”:用一个稳定递增的索引(如 j)驱动循环,再通过数学运算(如取模)动态生成你真正需要的周期性值。
例如,要生成从 1 开始、每 25 个数循环一次(即:1, 2, ..., 24, 25, 1, 2, ...)的序列,共运行 34 次迭代,推荐写法如下:
for (int j = 0; j <p>✅ <strong>为什么 <code>1 + (j % 25)</code> 正确?</strong> </p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2870" title="Gradle 9.8.0"><img src="https://img.php.cn/upload/manual/001/431/639/6ad9ce71d8cb6379.png" alt="Gradle 9.8.0" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/gongju/2870" title="Gradle 9.8.0" class="overflowclass">Gradle 9.8.0</a> <p class="overflowclass"></p> </div> <a rel="nofollow" href="/xiazai/gongju/2870" title="Gradle 9.8.0" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
-
j % 25产生0 ~ 24的余数序列; - 加
1后映射为1 ~ 25,完美满足“到 25 后归 1”的需求; -
j本身线性增长,保证循环总次数可控(此处为 34 次),无风险。
⚠️ 常见误区警示:
- ❌ 错误写法:
for (int i = 1; i <br> → 导致 <code>i在i=24时进入循环体,执行i=1,随后i++变为2,接着继续i=3,4,...,但i=25永远无法再次触发(因i始终 ≤24),且逻辑不可维护。 - ❌ 避免在循环条件中依赖被修改的
i做边界判断,易破坏循环不变式。
? 扩展用法:
若需支持任意上限 maxValue(如 25)和总迭代次数 totalRuns,可封装为通用模式:
final int maxValue = 25; final int totalRuns = 34; for (int j = 0; j <p>总结:循环计数的“回绕”本质是周期性映射问题,应优先采用无状态的数学表达式(如取模)而非命令式重置,既保证代码健壮性,又提升可读性与可维护性。</p>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










