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

Java怎么打印金字塔?

在Java中输出金字塔通常使用嵌套循环,外层控制行数,内层控制空格和星号打印,根据层数逐行输出空格和星号,形成金字塔形状,常用方法包括for循环和递归。

在Java中输出金字塔是一个常见的编程练习,主要通过嵌套循环控制空格和星号的排列实现,下面详细说明实现步骤、代码示例及原理:


金字塔输出原理

金字塔由空格和星号()组成,核心规律如下(假设金字塔有 n 层):

  1. 空格数量:每行的空格数 = n - 当前行数
  2. 星号数量:每行星号数 = 2 × 当前行数 - 1
  3. 行数控制:外层循环控制总行数(从1到n)

示例(5层金字塔):

    *     // 行1: 4空格 + 1星号
   ***    // 行2: 3空格 + 3星号
  *****   // 行3: 2空格 + 5星号
 *******  // 行4: 1空格 + 7星号
********* // 行5: 0空格 + 9星号

完整代码实现

import java.util.Scanner;
public class PyramidPrinter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入金字塔的层数: ");
        int n = scanner.nextInt();
        // 外层循环:控制行数 (1到n)
        for (int i = 1; i <= n; i++) {
            // 内层循环1:打印左侧空格
            for (int j = 1; j <= n - i; j++) {
                System.out.print(" ");
            }
            // 内层循环2:打印星号
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            // 换行
            System.out.println();
        }
        scanner.close();
    }
}

关键代码解析

  1. 输入处理

    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt(); // 获取用户输入的层数
  2. 外层循环(控制行数)

    for (int i = 1; i <= n; i++) { ... } // i表示当前行号
  3. 打印空格

    for (int j = 1; j <= n - i; j++) {
        System.out.print(" "); // 每行空格数 = 总层数n - 当前行i
    }
  4. 打印星号

    for (int k = 1; k <= 2 * i - 1; k++) {
        System.out.print("*"); // 每行星号数 = 2×行数-1
    }

运行示例

输入层数 5 时,输出:


扩展变体

  1. 倒金字塔:将外层循环改为 for (int i = n; i >= 1; i--)
  2. 空心金字塔:在星号循环中加入条件判断,仅首尾行和每行首尾打印星号,中间打印空格:
    for (int k = 1; k <= 2 * i - 1; k++) {
        if (k == 1 || k == 2 * i - 1 || i == n) {
            System.out.print("*");
        } else {
            System.out.print(" ");
        }
    }

注意事项

  • 输入验证:可添加逻辑确保层数为正整数(如 if (n > 0))。
  • 性能优化:大层数时可用 StringBuilder 替代直接打印。
  • 对齐问题:若需居中对称,确保使用等宽字体(如IDE默认字体)。

通过此方法,您可灵活控制金字塔的层数、形状和样式,核心在于理解空格与星号的数学关系循环嵌套的逻辑

引用说明:本文代码基于Java标准库实现,原理参考经典算法设计模式,实践时请确保使用JDK 8+环境。

0