菱形图案是编程练习中常见的经典问题,通过Java实现菱形不仅能巩固循环控制、条件判断等基础语法,还能培养逻辑思维和代码调试能力,本文将从菱形的基本结构出发,逐步讲解实心菱形与空心菱形的Java实现方法,并探讨优化思路与扩展可能。

菱形的基本结构分析
菱形本质上是由上下两个对称的三角形组合而成,其核心特征是行数、空格数与星号数的规律性变化,假设菱形的总行数为n(通常为奇数以保证对称性),则上半部分(包括中间行)的行数为(n+1)/2,下半部分为(n-1)/2,以5行菱形为例:
- 上半部分第1行:空格2个,星号1个(
2 = (5-1)/2 - 1 + 1,1 = 2*1 - 1); - 第2行:空格1个,星号3个;
- 第3行:空格0个,星号5个;
- 下半部分第4行:空格1个,星号3个;
- 第5行:空格2个,星号1个。
可见,每行的空格数和星号数与当前行号i相关,需通过数学公式计算,这是实现菱形的关键。
实心菱形的Java实现
实心菱形的核心是通过两层循环(外层控制行,内层控制空格和星号)逐行打印,以下以7行菱形为例,给出完整代码及解析:

public class SolidDiamond {
public static void main(String[] args) {
int n = 7; // 菱形总行数(奇数)
int half = (n + 1) / 2; // 上半部分行数
// 打印上半部分(包括中间行)
for (int i = 1; i <= half; i++) {
// 打印空格:空格数 = half - i
for (int j = 1; j <= half - i; j++) {
System.out.print(" ");
}
// 打印星号:星号数 = 2*i - 1
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println(); // 换行
}
// 打印下半部分
for (int i = half - 1; i >= 1; i--) {
// 打印空格:空格数 = half - i
for (int j = 1; j <= half - i; j++) {
System.out.print(" ");
}
// 打印星号:星号数 = 2*i - 1
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println(); // 换行
}
}
}
代码解析:
- 外层循环分为上下两部分:上半部分
i从1递增到half,下半部分i从half-1递减到1; - 每行先打印空格,空格数=
half - i,确保星号居中; - 再打印星号,星号数=
2*i - 1,满足奇数递增(上半部分)或递减(下半部分)规律; - 通过
System.out.println()实现换行,完成每行输出。
空心菱形的Java实现
空心菱形在实心基础上增加了条件判断:仅打印每行的首尾星号及中间行的星号,其余位置打印空格,以下同样以7行菱形为例:
public class HollowDiamond {
public static void main(String[] args) {
int n = 7;
int half = (n + 1) / 2;
// 上半部分
for (int i = 1; i <= half; i++) {
// 空格
for (int j = 1; j <= half - i; j++) {
System.out.print(" ");
}
// 星号:首尾或中间行
for (int k = 1; k <= 2 * i - 1; k++) {
if (k == 1 || k == 2 * i - 1 || i == half) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
// 下半部分
for (int i = half - 1; i >= 1; i--) {
// 空格
for (int j = 1; j <= half - i; j++) {
System.out.print(" ");
}
// 星号:首尾或中间行
for (int k = 1; k <= 2 * i - 1; k++) {
if (k == 1 || k == 2 * i - 1 || i == half) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
代码解析:

- 内层星号循环中增加条件判断:
k == 1(每行首)、k == 2*i - 1(每行尾)或i == half(中间行)时打印星号,否则打印空格; - 中间行(
i == half)需全部打印星号,以保证菱形闭合; - 上下部分逻辑对称,仅行号递增/递减方向不同。
优化与扩展
- 动态输入行数:通过
Scanner让用户输入行数,并处理偶数行的情况(如自动调整为最近的奇数); - 自定义字符:将星号替换为用户输入的字符(如、),增强灵活性;
- 彩色输出:结合ANSI颜色代码(如
\u001B[31m),实现彩色菱形,提升视觉效果; - 方法封装:将菱形打印逻辑封装为独立方法,通过参数控制行数、字符等,提高代码复用性。
Java编程菱形的核心在于理解行、空格、星号之间的数学关系,并通过循环嵌套与条件判断实现规律控制,从实心到空心,从固定行数到动态输入,逐步优化代码的过程能有效提升对程序逻辑的掌控能力,掌握这一基础练习后,读者可进一步尝试更复杂的图案(如数字菱形、字母菱形),为后续学习图形界面开发或算法设计打下坚实基础。



















