
使用取模运算(%)可优雅实现循环计数:将原始索引映射到 1–25 的周期序列,避免手动重置导致的无限循环或逻辑错误。
使用取模运算(%)可优雅实现循环计数:将原始索引映射到 1–25 的周期序列,避免手动重置导致的无限循环或逻辑错误。
在 Java 中,for 循环的控制变量(如 i)由循环结构自动递增,不能在循环体内直接将其“重置为 1”并期望继续正常执行——因为下一次迭代仍会执行 i++,极易引发逻辑混乱(例如跳过值、死循环或越界)。因此,正确的做法是分离“循环步进逻辑”与“业务所需值逻辑”:用一个稳定递增的索引(如 j)驱动循环,再通过数学运算(如取模)动态生成你真正需要的周期性值。
例如,要生成从 1 开始、每 25 个数循环一次(即:1, 2, ..., 24, 25, 1, 2, ...)的序列,共运行 34 次迭代,推荐写法如下:
for (int j = 0; j < 34; j++) {
int i = 1 + (j % 25); // ✅ 安全、清晰、无副作用
System.out.print(i + " "); // 输出:1 2 3 ... 24 25 1 2 ... 9
}✅ 为什么 1 + (j % 25) 正确?
-
j % 25产生0 ~ 24的余数序列; - 加
1后映射为1 ~ 25,完美满足“到 25 后归 1”的需求; -
j本身线性增长,保证循环总次数可控(此处为 34 次),无风险。
⚠️ 常见误区警示:
立即学习“Java免费学习笔记(深入)”;
- ❌ 错误写法:
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 < totalRuns; j++) {
int displayValue = 1 + (j % maxValue);
// 使用 displayValue 进行业务处理
}总结:循环计数的“回绕”本质是周期性映射问题,应优先采用无状态的数学表达式(如取模)而非命令式重置,既保证代码健壮性,又提升可读性与可维护性。


















