以下是用Java打印空心菱形的详细方法,包含代码实现、逻辑解释和优化建议,适合不同基础的访客理解:
核心思路
空心菱形由对称的上下三角形组成,关键点在于:
- 空格控制:定位每行起始位置
- 星号规则:首尾位置打印星号,中间用空格填充
- 对称分割:分上半部分(递增)和下半部分(递减)
完整代码实现
import java.util.Scanner; public class HollowDiamond { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入菱形高度(奇数): "); int n = scanner.nextInt(); // 确保输入为奇数 if (n % 2 == 0) { System.out.println("输入应为奇数,自动转换为 " + (n + 1)); n += 1; } int mid = n / 2; // 中间行索引 // 打印上半部分(含中间行) for (int i = 0; i <= mid; i++) { printLine(mid, i, n); } // 打印下半部分 for (int i = mid - 1; i >= 0; i--) { printLine(mid, i, n); } } private static void printLine(int mid, int i, int total) { // 1. 打印前导空格 for (int j = 0; j < Math.abs(mid - i); j++) { System.out.print(" "); } // 2. 打印第一个星号 System.out.print("*"); // 3. 计算中间空格数 int innerSpace = total - 2 * Math.abs(mid - i) - 2; // 4. 打印中间空格和尾星号(非首行) if (innerSpace > 0) { for (int j = 0; j < innerSpace; j++) { System.out.print(" "); } System.out.print("*"); } // 5. 换行 System.out.println(); } }
关键逻辑说明
-
输入处理:
- 要求输入奇数高度(偶数自动+1)
- 示例:输入
5
生成标准菱形
-
行数计算:
int mid = n / 2; // 示例:n=5时 mid=2(0起索引)
-
空格规律:
| 行号(i) | 前导空格数 | 中间空格数 | 输出示例 |
|———|————|————|———-|
| 0 | 2 | -1 | |
| 1 | 1 | 1 | |
| 2 | 0 | 3 | | -
核心公式:
- 前导空格:
Math.abs(mid - i)
- 中间空格:
总宽度 - 2*前导空格 - 2
- 尾星号条件:
中间空格数 > 0
- 前导空格:
运行示例
输入高度5
时输出:
优化建议
- 动态构建:改用
StringBuilder
减少IO操作StringBuilder sb = new StringBuilder(); // ... 在方法内追加字符 System.out.print(sb.toString());
- 异常处理:添加输入验证
if (n <= 0) { System.out.println("高度必须为正整数"); return; }
- 扩展性:封装打印方法,支持不同字符
void printDiamond(int n, char symbol) { ... }
常见问题解决
- 菱形不对称:确保总行数为奇数
- 多行合并:检查换行符
println()
是否遗漏 - 首尾行异常:验证
innerSpace>0
的条件判断
引用说明:本文代码逻辑基于空间几何对称性原则实现,参考《Java编程思想》中循环控制结构的最佳实践,算法通过数学关系式动态计算空格位置,避免硬编码提升可扩展性。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/27838.html