首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 控制台輸出數字金字塔完整示例與原理解析

     編輯:Java 相關知識

前言

在 Java 學習初期,利用巢狀迴圈在控制台列印各種圖形是鍛鍊邏輯思維的經典練習。本文分享一個「數字金字塔」的完整實作,其特點是每一行呈現對稱的倍數序列(1、1 2 1、1 2 4 2 1……),並詳細解析核心算法與格式化輸出技巧。

預期輸出效果

        1
      1   2   1
    1   2   4   2   1
  1   2   4   8   4   2   1
1   2   4   8  16   8   4   2   1

註:控制台字體等寬特性限制,數字無法完美置中,本示例採用固定寬度右對齊方式模擬金字塔結構。

核心代碼實作

public class NumberPyramid {
    public static void main(String[] args) {
        // 總行數
        int lineNumber = 5;
        // 底數(每層遞增倍率)
        int baseNumber = 2;

        // 1. 預先生成每層所需的數字陣列:{1, 2, 4, 8, 16}
        int[] numbers = new int[lineNumber];
        numbers[0] = 1;
        for (int i = 1; i < lineNumber; i++) {
            numbers[i] = numbers[i - 1] * baseNumber;
        }

        // 2. 計算每個數字佔用的字符寬度(最大數字位數 + 2 空格間距)
        int columnsPerNumber = String.valueOf(numbers[lineNumber - 1]).length() + 2;

        // 3. 雙層迴圈輸出金字塔
        for (int i = 0; i < lineNumber; i++) {
            // 3.1 輸出前導縮進(每層遞減)
            for (int j = 0; j < lineNumber - i - 1; j++) {
                System.out.printf("%" + columnsPerNumber + "s", " ");
            }

            // 3.2 輸出左半部遞增序列 1, 2, 4...
            for (int k = 0; k <= i; k++) {
                System.out.printf("%" + columnsPerNumber + "d", numbers[k]);
            }

            // 3.3 輸出右半部遞減序列 ... 4, 2, 1
            for (int m = 0; m < i; m++) {
                System.out.printf("%" + columnsPerNumber + "d", numbers[i - m - 1]);
            }

            // 3.4 換行
            System.out.println();
        }
    }
}

關鍵技術點解析

1. 數據預生成策略

先將每行需要的數字存入陣列,避免在輸出迴圈中重複計算冪次,提升效能並簡化邏輯。

2. 動態寬度計算

columnsPerNumber = String.valueOf(maxNumber).length() + 2

根據最大數字位數動態決定格式化寬度,確保不同行數、不同底數下對齊效果一致。

3. printf 格式化輸出

%{width}s 用於輸出固定寬度空格(縮進),%{width}d 用於右對齊輸出整數。這比手動拼接字符串更優雅、效能更好。

4. 對稱序列構建

每行分為「縮進 → 遞增部 → 遞減部」三段,遞減部索引設計為 numbers[i - m - 1] 巧妙實現鏡像效果。

擴展練習建議

  • 修改 baseNumber 為 3、10 觀察不同倍率金字塔
  • 嘗試將輸出導向文件而非控制台
  • 改寫為遞歸版本加深對遞歸與迴圈轉換的理解

總結

這個示例雖簡單,卻涵蓋了陣列操作、迴圈控制、格式化輸出、算法對稱性設計等 Java 基礎核心技能。掌握此類「控制台圖形輸出」題型,對於培養程式設計的邏輯嚴密性與細節把控力大有裨益。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved