
本文讲解如何通过修正内层循环的边界条件,实现每行输出数字后跟随与其值相等数量的 '#' 字符,解决因内层循环固定迭代次数导致符号数量恒定的常见错误。
本文讲解如何通过修正内层循环的边界条件,实现每行输出数字后跟随与其值相等数量的 '#' 字符,解决因内层循环固定迭代次数导致符号数量恒定的常见错误。
要实现如输入 5 时输出:
1# 2## 3### 4#### 5#####
关键在于:每行中 # 的个数必须与当前行的数字 i 完全一致。而原代码中内层循环写为 for (j = inputNum; j >= 1; --j),导致无论 i 是 1 还是 5,都打印 inputNum 个 #,因此所有行的 # 数量相同。
✅ 正确做法是:将内层循环的上限设为外层变量 i,即 for (j = 1; j (更符合直觉)或等价地 <code>for (j = i; j >= 1; --j)(如参考答案所示)。两种写法逻辑等价,仅遍历方向不同。
以下是修正后的完整可运行代码:
立即学习“Java免费学习笔记(深入)”;
import java.util.Scanner;
public class LoopPatterns {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
int inputNum = scnr.nextInt();
for (int i = 1; i <= inputNum; i++) {
System.out.print(i); // 先输出数字
for (int j = 1; j <= i; j++) { // 关键:内层循环执行 i 次
System.out.print("#");
}
System.out.println(); // 换行
}
scnr.close();
}
}? 注意事项:
- 内层循环变量
j的范围必须依赖于当前外层循环变量i,而非固定值(如inputNum); - 建议使用
j = 1; j 形式,语义更清晰,避免因 <code>--j与边界混淆引发的低级错误; - 记得在循环结束后调用
scnr.close()释放资源(良好实践); - 若输入为
0或负数,当前逻辑不输出任何内容(符合题意中“从 1 到 inputNum”的要求),但生产环境中建议增加输入校验。
? 总结:嵌套循环中,内层循环的迭代次数应由外层当前状态动态决定。本例本质是构建一个“右对齐阶梯形”字符图案,掌握 i 与 j 的依赖关系,是解决各类模式打印问题(如三角形、菱形、乘法表等)的核心基础。


















