上一篇                     
               
			  如何用Java编写菱形图案?
- 后端开发
- 2025-06-13
- 4958
 使用Java输出菱形需分为上下两部分:上半部分每行空格递减、星号递增(奇数个);下半部分空格递增、星号递减,通过嵌套循环控制行数、空格数和星号数,利用数学关系计算每行字符数量,确保对称性即可实现标准菱形图案。
 
在Java中输出菱形图案是一个常见的编程练习,通过控制循环和条件判断实现图形的对称性,以下详细说明实现原理、代码示例和优化技巧,帮助您快速掌握。
实现原理
菱形由空格和星号(*)组成,分为对称的上半部分和下半部分:
- 上半部分:行数递增,空格递减,星号递增(1, 3, 5…奇数序列)
- 下半部分:行数递减,空格递增,星号递减
- 关键公式: 
  - 每行星号数 = 2 * 当前行索引 + 1
- 每行空格数 = 总行数/2 - 当前行索引(取绝对值保证对称)
 
- 每行星号数 = 
完整代码示例
import java.util.Scanner;
public class DiamondPattern {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入菱形的半高(大于0的整数): ");
        int halfHeight = scanner.nextInt();
        // 计算总行数(奇数)
        int totalRows = 2 * halfHeight - 1;
        // 打印上半部分(包括中间行)
        for (int i = 0; i < halfHeight; i++) {
            // 打印空格
            for (int j = 0; j < halfHeight - i - 1; j++) {
                System.out.print(" ");
            }
            // 打印星号
            for (int k = 0; k < 2 * i + 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
        // 打印下半部分
        for (int i = halfHeight - 2; i >= 0; i--) {
            // 打印空格
            for (int j = 0; j < halfHeight - i - 1; j++) {
                System.out.print(" ");
            }
            // 打印星号
            for (int k = 0; k < 2 * i + 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
} 
代码解析
-  输入处理: - 使用Scanner获取用户输入的半高值(如输入3,则菱形总高度为5行)
- halfHeight控制菱形大小
 
- 使用
-  上半部分逻辑:  - 外层循环控制行数(0到halfHeight-1)
- 空格数 = halfHeight - i - 1(随行数增加而减少)
- 星号数 = 2*i + 1(生成奇数序列:1,3,5…)
 
- 外层循环控制行数(0到
-  下半部分逻辑: - 外层循环反向进行(halfHeight-2到0)
- 空格和星号计算方式与上半部分相同
- 通过倒序循环实现对称
 
- 外层循环反向进行(
-  输出示例(输入3): 
高级优化技巧
-  单循环实现(减少代码量):  int size = 2 * halfHeight - 1; for (int i = 0; i < size; i++) { int spaces = Math.abs(halfHeight - i - 1); int stars = size - 2 * spaces; System.out.println(" ".repeat(spaces) + "*".repeat(stars)); }
-  空心菱形(仅输出边框): // 修改星号打印部分 if (k == 0 || k == 2 * i) { // 只输出首尾星号 System.out.print("*"); } else { System.out.print(" "); }
-  动态字符: - 将星号替换为变量(如char symbol = '#';)
- 实现自定义字符菱形
 
- 将星号替换为变量(如
常见问题解决
-  菱形不对称: - 检查半高计算:总行数必须是奇数(2*halfHeight-1)
- 验证空格公式:上半部分空格应为halfHeight - i - 1
 
- 检查半高计算:总行数必须是奇数(
-  输入值验证:  if (halfHeight < 1) { System.out.println("输入值必须大于0!"); return; }
-  控制台对齐问题: - 使用System.out.printf格式化输出
- 或采用StringBuilder构建每行字符串
 
- 使用
引用说明:本文代码基于Java 11语法编写,
String.repeat()方法需JDK 11+,低版本可使用循环替代,算法设计参考《Java编程思想》循环结构应用范例,结合ACM图形输出最佳实践优化。
 
  
			 
			 
			 
			 
			 
			 
			 
			