
本文详解如何通过条件判断优化system.out.println()调用,精准控制上下两个对称三角形之间的换行逻辑,彻底消除中间多余的两行空白。
在打印由星号(*)构成的对称三角形图案时,一个常见问题是:上半部分(倒三角)结束后自动换行,下半部分(正三角)开始前又执行了一次换行,导致两者之间出现两行空白——这正是原代码中未加区分地在每轮外层循环末尾调用 System.out.println() 所致。
关键在于:并非每次内层循环结束后都需要换行。我们需要对“是否该换行”施加逻辑约束:
- 对于倒三角(从 rows 递减到 1),仅当当前行不是最后一行(即 row > 1) 时才换行;否则(row == 1,即最底端单星号行)不换行,为后续正三角留出衔接空间;
- 对于正三角(从 0 递增到 rows),仅当当前行尚未达到最大行数(即 row 时才换行;当 row == rows(即最后一行完整星号)后,不再额外换行,避免结尾冗余空行。
以下是优化后的完整示例代码(已采用语义化命名与 0 起始索引,提升可读性与工程规范性):
public class StarPattern {
public static void main(String[] args) {
printSymmetricTriangles(4);
}
private static void printSymmetricTriangles(int rows) {
// 上半部分:倒三角(含 rows 行,从满行递减)
for (int row = rows; row > 0; row--) {
for (int col = 0; col < row; col++) {
System.out.print(" * ");
}
if (row > 1) { // 关键:最后一行(row == 1)不换行
System.out.println();
}
}
// 下半部分:正三角(从 1 行递增至 rows 行)
for (int row = 0; row <= rows; row++) {
for (int col = 0; col < row; col++) {
System.out.print(" * ");
}
if (row < rows) { // 关键:最大行(row == rows)后不换行
System.out.println();
}
}
}
}输出结果(输入 rows = 4):
立即学习“Java免费学习笔记(深入)”;
* * * * * * * * * * * * * * * * * * * *
✅ 注意事项总结:
- 避免无条件 System.out.println():它强制插入换行符,是多余空行的根源;
- 使用 row > 1 和 row = 1 或 row
- 推荐统一采用 0 起始索引(如 col = 0; col
- 方法名与变量名应具描述性(如 printSymmetricTriangles、rows),增强代码自解释性。
通过这种精细化的换行控制,你不仅能解决当前的双空行问题,更能建立起对输出流行为的深层理解,为复杂格式化输出打下坚实基础。










