「用 for 循環打印空心菱形」是考試、面試高頻考點,考察雙層循環控制、邊界條件判斷與幾何邏輯轉化能力。本文逐行拆解算法思路,提供可直接運行的標準實現。
以 10 行為例(傳入偶數自動 +1 變奇數,保證對稱):
size(奇數)mid = size / 2(0-based)i 行(0 ≤ i ≤ mid)屬於上半部,星號數 = 2*i + 1,前導空格 = mid - ii 行(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 行
}
}
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
mid、stars、spaces,避免魔法數字mid 計算用整除j == 0 || j == rowStars - 1,適用於上/下半部printLine(int spaces, int stars, boolean hollow),支援實心/空心切換*\033[31m(紅)