双层for循环需外层每轮结束前调用System.out.println()换行;内层用print()控制不换行,避免混用print()和println()导致空行。

Java 双层 for 循环怎么写才不打印成一横排
根本原因是内层循环没换行,System.out.print() 会持续输出在同一行。只要外层每轮结束前加一次 System.out.println(),就能“折行”形成三角形结构。
- 用
print()而不是println()控制单个字符不换行 - 外层循环每迭代一次,必须显式调用一次
println() - 别在内层循环里混用
print()和println(),容易多出空行
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println(); // ← 这一行不能少,也不能写在内层循环里
}
为什么 i 和 j 的起始值常从 1 开始而不是 0
从 1 开始更贴合“第 i 行打印 i 个星号”的直觉逻辑,避免后续计算时反复 +1/-1。若从 0 开始,j 或 <code>j 容易看错边界,尤其调试时数行数容易对不上。
- 行号
i和该行符号数量一致 → 用i作内层上限最自然 - 起始为 0 时,常见错误是写成
j ,导致第 0 行打 1 个、第 1 行打 2 个……整体下移一行 - 新手调试时习惯用“这是第几行”来验证,从 1 开始和肉眼观察完全对应
想打印数字直角三角形,print(j) 为什么结果不对齐
数字位数不同(比如 1 占 1 字符,10 占 2 字符),纯靠 print() 无法自动对齐,视觉上就不是“直角三角形”,而是右倾的梯形。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 简单补空格不通用:两位数要补、三位数还要改,维护麻烦
- 推荐用
System.out.printf("%2d", j)固定宽度,但要注意%2d是右对齐,左边补空格 - 如果要求左对齐,得写成
%-2d;全用String.format()拼接再 print 也行,但性能略低
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.printf("%2d", j); // 输出: 1 1 2 1 2 3 ...
}
System.out.println();
}
嵌套循环性能真有问题吗?100 行以内完全不用优化
双层循环时间复杂度是 O(n²),但 Java 在现代机器上跑 100 行(共约 5000 次迭代)几乎感觉不到延迟。真正卡顿往往来自 I/O——也就是频繁调用 System.out.print()。
立即学习“Java免费学习笔记(深入)”;
- 每调用一次
print()都涉及底层输出缓冲区操作,100 行三角形会触发上千次 - 实际提速方法:用
StringBuilder拼好整行再println(),或直接用System.out.write()写字节数组 - 但除非你是在生成万行图案或高频调用,否则优先保证可读性,别过早优化


















