
本文详解如何通过修正内层循环的边界条件,使每个数字后跟随与其值相等数量的“#”符号,解决常见嵌套循环逻辑错位问题。
本文详解如何通过修正内层循环的边界条件,使每个数字后跟随与其值相等数量的“#”符号,解决常见嵌套循环逻辑错位问题。
要实现“输入数字 n,输出 1#、2##、…、n(n个#)”的格式,关键在于:**内层循环的迭代次数必须动态匹配当前外层循环变量的值**,而非固定为 `inputNum`。原代码中内层循环写作 for (j = inputNum; j >= 1; --j),导致每行都打印 inputNum 个 #,因此所有行末尾的 # 数量相同(如输入5时每行都是5个#)。这违背了题目要求——第 i 行应恰好输出 i 个 #。
✅ 正确做法是将内层循环上限设为当前外层变量 i,并从 i 递减至 1(或从 1 递增至 i),从而精准控制 # 的数量:
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);
// 内层循环:打印 i 个 '#'
for (int j = 1; j <= i; j++) {
System.out.print("#");
}
System.out.println(); // 换行
}
scnr.close();
}
}? 提示:内层循环也可写成
for (int j = i; j >= 1; j--),效果一致;但采用升序(j = 1; j )更符合直觉,也便于后续扩展(如加入索引相关逻辑)。
⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- 避免在循环中重复创建
Scanner或忽略资源关闭(本例中建议调用scnr.close()); - 变量作用域推荐使用
for (int i = ...)形式,避免污染外层作用域; - 若需处理边界情况(如
inputNum ≤ 0),应增加输入校验,例如:if (inputNum < 1) { System.out.println("Input must be a positive integer."); return; }
该模式是嵌套循环的经典应用场景——外层控制“行”与“基数”,内层控制“列”与“重复次数”。掌握这一思维,可快速迁移至星号三角形、乘法表、字符矩阵等同类问题。


















