编写一个程序,打印出如下图案(菱形):
*
***
*****
*******
*****
***
*该问题要求打印一个对称的菱形图案。为了实现这一点,我们可以将整个图形分为两部分来处理:上半部分和下半部分。
上半部分(包括中间的最大行)是一个等腰三角形,每行的星号 (*) 数量从 1 开始逐渐增加到最大值。
下半部分是从最大行开始递减的等腰三角形,每行的星号 (*) 数量逐渐减少回到 1。
每一行都由空格和星号组成,其中空格用于对齐以形成菱形形状。
分析步骤:
确定总行数,这里是 7 行(4 行递增 +3 行递减)。
上半部分(包括中点行)的每一行,前导空格数随着行数增加而减少,星号数则相应增加。
下半部分则是相反的过程,前导空格数增加,星号数减少。
对于第i行(从 1 开始计数),前导空格的数量是总行数/2 - i + 1,对于上半部分,当i=1时,前导空格最多;随着i的增大,前导空格逐渐减少。
星号 (*) 的数量遵循2*i - 1的规律,即随着行数的增加而线性增加。
在达到顶点后,下半部分的规律与上半部分对称,只是方向相反。
public class Demo19 {
public static void main(String[] args) {
int size = 4; // 定义上半部分的行数,也是最大宽度的一半
// 打印上半部分
for (int i = 1; i <= size; i++) {
// 打印前导空格
for (int k = 1; k <= size - i; k++)
System.out.print(" ");
// 打印星号
for (int j = 1; j <= 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
// 打印下半部分
for (int i = size - 1; i >= 1; i--) {
// 打印前导空格
for (int k = 1; k <= size - i; k++)
System.out.print(" ");
// 打印星号
for (int j = 1; j <= 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
}
}