
本文详解如何基于循环索引(而非累加值)设计逻辑分支,修正因误用变量导致的输出偏差,通过对比错误与正确实现,帮助开发者精准控制循环中的数值生成规则。
本文详解如何基于循环索引(而非累加值)设计逻辑分支,修正因误用变量导致的输出偏差,通过对比错误与正确实现,帮助开发者精准控制循环中的数值生成规则。
在实际编程中,循环变量的语义界定至关重要。本例中,问题核心并非对 i + n 进行条件判断,而是直接对循环索引 i 应用规则——这是理解整个逻辑的关键转折点。原代码将 num = i + n 作为判断主体,导致所有计算偏离预期;而题目期望的输出序列 5 1 6 0 7 5 8 7 9 0 实质上是:以 n = 5 为基准,对 i = 0 到 9 分别执行以下规则:
- 若 i 能被 2 整除 → 输出 i / 2 + n
- 若 i 能被 3 整除(且不被 2 整除,因 else if 顺序)→ 输出 0
- 其他情况 → 输出 i
注意:整除判断需遵循优先级——i % 2 == 0 在前,故 i = 0, 2, 4, 6, 8 触发第一条;i = 3, 9(不被 2 整除但被 3 整除)触发第二条;i = 1, 5, 7 触发第三条。
以下是修正后的完整可运行代码:
public class HelloPrinter {
public static void main(String[] args) {
printCount(5);
printCountWhile(5);
}
public static void printCount(int n) {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
System.out.print((i / 2) + n + " ");
} else if (i % 3 == 0) {
System.out.print("0 ");
} else {
System.out.print(i + " ");
}
}
System.out.println();
}
public static void printCountWhile(int n) {
int i = 0;
while (i < 10) {
if (i % 2 == 0) {
System.out.print((i / 2) + n + " ");
} else if (i % 3 == 0) {
System.out.print("0 ");
} else {
System.out.print(i + " ");
}
i++;
}
System.out.println();
}
}✅ 输出结果:
5 1 6 0 7 5 8 7 9 0 5 1 6 0 7 5 8 7 9 0
? 关键修正点解析:
- ❌ 错误根源:原逻辑混淆了“索引”与“数据值”。num = i + n 是人为构造的中间值,但题目规则明确作用于循环位置(即 i);
- ✅ 正确建模:i 是自然递增的控制变量,代表第几个元素(0-indexed),其本身承载业务语义;
- ⚠️ 注意 else if 的执行顺序:i = 0 同时满足 %2==0 和 %3==0,但因 if 在前,走第一条分支(0/2 + 5 = 5),符合预期;i = 6 同理得 6/2 + 5 = 8;而 i = 3 和 i = 9 因不满足 %2==0,才进入 else if 输出 0;
- ? i = 1, 5, 7 均不被 2 或 3 整除,故直接输出 i 自身值(即 1, 5, 7),与目标序列完全一致。
? 总结建议:
在编写带条件输出的循环时,务必明确「判断对象」是循环变量 i、累计值 sum、还是外部输入 n。可通过小规模手动推演(如列出 i=0..3 的每步输出)快速验证逻辑一致性。此外,将业务规则清晰映射到代码分支结构,比盲目套用公式更能避免语义错位。










