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

Java 面試必刷:雙層 for 循環打印空心菱形完整解析

     編輯:Java 綜合教學

循環嵌套經典題:空心菱形打印邏輯拆解與代碼實現

「用 for 循環打印空心菱形」是考試、面試高頻考點,考察雙層循環控制、邊界條件判斷與幾何邏輯轉化能力。本文逐行拆解算法思路,提供可直接運行的標準實現。

一、幾何規律分析

以 10 行為例(傳入偶數自動 +1 變奇數,保證對稱):

  • 菱形總行數 size(奇數)
  • 中間行索引 mid = size / 2(0-based)
  • 第 i 行(0 ≤ i ≤ mid)屬於上半部,星號數 = 2*i + 1,前導空格 = mid - i
  • 第 i 行(mid < i < size)屬於下半部,星號數 = 2*(size - i) - 1,前導空格 = i - mid
  • 空心判斷:每行首尾打印 *,中間打印空格

二、核心代碼實現

public class DiamondPrinter {

    /** 打印空心菱形
     * @param size 期望行數(偶數自動 +1) */
    public static void printHollowRhombus(int size) {
        if (size % 2 == 0) size++;          // 保證奇數行,上下對稱
        int mid = size / 2;                 // 中間行索引

        // ===== 上半部(含中間行) =====
        for (int i = 0; i <= mid; i++) {
            // 1. 前導空格
            for (int s = 0; s < mid - i; s++) System.out.print(" ");
            // 2. 星號/空心
            for (int j = 0; j < 2 * i + 1; j++) {
                if (j == 0 || j == 2 * i)   // 首尾列
                    System.out.print("*");
                else
                    System.out.print(" ");   // 中間空心
            }
            System.out.println();            // 換行
        }

        // ===== 下半部 =====
        for (int i = mid + 1; i < size; i++) {
            // 1. 前導空格
            for (int s = 0; s < i - mid; s++) System.out.print(" ");
            // 2. 星號/空心
            int stars = 2 * (size - i) - 1;  // 遞減星號數
            for (int j = 0; j < stars; j++) {
                if (j == 0 || j == stars - 1)
                    System.out.print("*");
                else
                    System.out.print(" ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        printHollowRhombus(10);  // 實際打印 11 行
    }
}

三、運行輸出效果(11 行)

     *
    * *
   *   *
  *     *
 *       *
*         *
 *       *
  *     *
   *   *
    * *
     *

四、關鍵點總結(面試加分項)

  1. 統一變量命名:mid、stars、spaces,避免魔法數字
  2. 邊界處理:偶數行自動轉奇數,mid 計算用整除
  3. 空心判斷通式:j == 0 || j == rowStars - 1,適用於上/下半部
  4. 可擴展性:將打印邏輯封裝為 printLine(int spaces, int stars, boolean hollow),支援實心/空心切換
  5. 複雜度:時間 O(n²)、空間 O(1),無額外數組

五、變體練習建議

  • 打印實心菱形:移除空心判斷,全行打印 *
  • 打印帶顏色菱形:引入 ANSI 轉義碼 \033[31m(紅)
  • 打印數字菱形:星號替換為行號或遞增數字
  • 使用 StringBuilder 累積每行再一次性輸出,減少 I/O 調用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved