当前位置:首页 > 后端开发 > 正文

如何用Java编写菱形图案?

使用Java输出菱形需分为上下两部分:上半部分每行空格递减、星号递增(奇数个);下半部分空格递增、星号递减,通过嵌套循环控制行数、空格数和星号数,利用数学关系计算每行字符数量,确保对称性即可实现标准菱形图案。

在Java中输出菱形图案是一个常见的编程练习,通过控制循环和条件判断实现图形的对称性,以下详细说明实现原理、代码示例和优化技巧,帮助您快速掌握。

实现原理

菱形由空格和星号(*)组成,分为对称的上半部分和下半部分:

  1. 上半部分:行数递增,空格递减,星号递增(1, 3, 5…奇数序列)
  2. 下半部分:行数递减,空格递增,星号递减
  3. 关键公式
    • 每行星号数 = 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();
        }
    }
}

代码解析

  1. 输入处理

    • 使用Scanner获取用户输入的半高值(如输入3,则菱形总高度为5行)
    • halfHeight控制菱形大小
  2. 上半部分逻辑

    如何用Java编写菱形图案?  第1张

    • 外层循环控制行数(0到halfHeight-1
    • 空格数 = halfHeight - i - 1(随行数增加而减少)
    • 星号数 = 2*i + 1(生成奇数序列:1,3,5…)
  3. 下半部分逻辑

    • 外层循环反向进行(halfHeight-2到0)
    • 空格和星号计算方式与上半部分相同
    • 通过倒序循环实现对称
  4. 输出示例(输入3):




高级优化技巧

  1. 单循环实现(减少代码量):

    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));
    }
  2. 空心菱形(仅输出边框):

    // 修改星号打印部分
    if (k == 0 || k == 2 * i) {  // 只输出首尾星号
     System.out.print("*");
    } else {
     System.out.print(" ");
    }
  3. 动态字符

    • 将星号替换为变量(如char symbol = '#';
    • 实现自定义字符菱形

常见问题解决

  1. 菱形不对称

    • 检查半高计算:总行数必须是奇数(2*halfHeight-1
    • 验证空格公式:上半部分空格应为halfHeight - i - 1
  2. 输入值验证

    if (halfHeight < 1) {
        System.out.println("输入值必须大于0!");
        return;
    }
  3. 控制台对齐问题

    • 使用System.out.printf格式化输出
    • 或采用StringBuilder构建每行字符串

引用说明:本文代码基于Java 11语法编写,String.repeat()方法需JDK 11+,低版本可使用循环替代,算法设计参考《Java编程思想》循环结构应用范例,结合ACM图形输出最佳实践优化。

0