在Java编程学习中,嵌套循环是处理重复性逻辑的核心结构,打印沙漏形状、对称图形这类需求,本质是通过外层循环控制行数,内层循环分别控制空格和输出字符的数量,只要理清图形的分布规律,就能快速写出对应的实现代码。

沙漏形状打印的实现思路
沙漏形状的特点是上下对称,上半部分从最多字符行逐行减少到1个字符,下半部分从1个字符逐行增加到最多字符行,每一行的字符前需要补充对应数量的空格,保证图形居中。
假设我们要打印高度为n的沙漏(n为奇数,保证上下对称),上半部分共有(n+1)/2行,下半部分共有(n-1)/2行,每行的字符数规律为:第i行(从0开始计数)的字符数为n - 2*i,空格数为i。
完整代码实现
public class HourglassPrinter {
public static void main(String[] args) {
int n = 7; // 沙漏的高度,必须为奇数
int half = (n + 1) / 2; // 上半部分行数
// 打印上半部分(包含中间行)
for (int i = 0; i < half; i++) {
// 打印空格
for (int j = 0; j < i; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 0; k < n - 2 * i; k++) {
System.out.print("*");
}
System.out.println();
}
// 打印下半部分
for (int i = 1; i < half; i++) {
// 打印空格
for (int j = 0; j < half - 1 - i; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 0; k < 2 * i + 1; k++) {
System.out.print("*");
}
System.out.println();
}
}
}
运行上述代码,当n为7时,会输出如下沙漏形状:
******* ***** *** * *** ***** *******
对称图形的通用实现逻辑
对称图形的核心特征是左右或者上下对称,实现时可以先拆分图形的结构,把图形分为对称的两部分或者多个部分,分别用循环控制每部分的输出内容。
以打印菱形(上下对称的另一种常见图形)为例,它的结构和沙漏类似,只是上半部分从1个字符增加到最多,下半部分从最多减少到1个字符,调整循环变量的取值即可。
菱形打印代码示例
public class DiamondPrinter {
public static void main(String[] args) {
int n = 5; // 菱形的高度,奇数
int half = (n + 1) / 2;
// 上半部分
for (int i = 0; i < half; i++) {
// 打印空格
for (int j = 0; j < half - 1 - i; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 0; k < 2 * i + 1; k++) {
System.out.print("*");
}
System.out.println();
}
// 下半部分
for (int i = 1; i < half; i++) {
// 打印空格
for (int j = 0; j < i; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 0; k < n - 2 * i; k++) {
System.out.print("*");
}
System.out.println();
}
}
}
实现时的注意事项
- 循环变量的初始值和终止条件要对应图形的行数,避免多打印或者少打印行。
- 空格和字符的数量计算要准确,建议先手动推导前几行的规律,再转化为循环表达式。
- 如果图形高度是偶数,可以调整上下部分的行数分配,保证整体对称。
- 可以把打印空格和打印字符的逻辑封装成独立的方法,提升代码的复用性。
只要掌握了嵌套循环中行数、空格数、字符数的对应关系,不管是沙漏、菱形还是其他对称图形,都可以按照拆分结构、推导规律、编写循环的步骤快速实现。