透過巢狀迴圈控制空格與星號輸出,可在控制台產生多種幾何圖案。以下整理 10 種常見變體,附完整可執行程式碼。

public class PrintTriangle {
public static void main(String[] args) {
int n = 5; // 階數
System.out.println("====== 左對齊正三角形 ======");
printTopLeft(n);
System.out.println("====== 左對齊倒三角形 ======");
printDownLeft(n);
System.out.println("====== 右對齊正三角形 ======");
printTopRight(n);
System.out.println("====== 右對齊倒三角形 ======");
printDownRight(n);
System.out.println("====== 置中正三角形 ======");
printTopCenter(n);
System.out.println("====== 置中倒三角形 ======");
printDownCenter(n);
System.out.println("====== 置中空心正三角形 ======");
printTopMidBlank(n);
System.out.println("====== 置中空心倒三角形 ======");
printDownMidBlank(n);
System.out.println("====== 人字形 ======");
printTopRen(n);
}
// 左對齊正三角形
static void printTopLeft(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) System.out.print("* ");
System.out.println();
}
}
// 左對齊倒三角形
static void printDownLeft(int n) {
for (int i = 1; i <= n; i++) {
for (int j = n; j >= i; j--) System.out.print("* ");
System.out.println();
}
}
// 右對齊正三角形
static void printTopRight(int n) {
for (int i = 1; i <= n; i++) {
for (int j = n; j > i; j--) System.out.print(" ");
for (int j = i; j >= 1; j--) System.out.print("* ");
System.out.println();
}
}
// 右對齊倒三角形
static void printDownRight(int n) {
for (int i = n; i >= 1; i--) {
for (int j = n; j > i; j--) System.out.print(" ");
for (int j = i; j >= 1; j--) System.out.print("* ");
System.out.println();
}
}
// 置中正三角形
static void printTopCenter(int n) {
for (int i = 1; i <= n; i++) {
for (int j = i; j < n; j++) System.out.print(" ");
for (int j = 1; j <= i; j++) System.out.print("* ");
for (int j = 1; j < i; j++) System.out.print("* ");
System.out.println();
}
}
// 置中倒三角形
static void printDownCenter(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j < i; j++) System.out.print(" ");
for (int j = i; j <= n; j++) System.out.print("* ");
for (int j = i; j < n; j++) System.out.print("* ");
System.out.println();
}
}
// 置中空心正三角形
static void printTopMidBlank(int n) {
for (int i = 1; i <= n; i++) {
for (int j = i; j < n; j++) System.out.print(" ");
// 左半邊
for (int j = 1; j <= i; j++)
System.out.print((j == 1 || i == n) ? "* " : " ");
// 右半邊
for (int j = 1; j < i; j++)
System.out.print((j == i - 1 || i == n) ? "* " : " ");
System.out.println();
}
}
// 置中空心倒三角形
static void printDownMidBlank(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j < i; j++) System.out.print(" ");
for (int j = i; j <= n; j++)
System.out.print((i == 1 || j == i || i == n) ? "* " : " ");
for (int j = i; j < n; j++)
System.out.print((i == 1 || j == n - 1) ? "* " : " ");
System.out.println();
}
}
// 人字形
static void printTopRen(int n) {
for (int i = 1; i <= n; i++) {
for (int j = i; j < n; j++) System.out.print(" ");
// 左腳
for (int j = 1; j <= i; j++)
System.out.print(j == 1 ? "* " : " ");
// 右腳
for (int j = 1; j < i; j++)
System.out.print(j == i - 1 ? "* " : " ");
System.out.println();
}
}
}
| 圖案類型 | 外層迴圈 | 空格控制 | 星號邏輯 |
|---|---|---|---|
| 左對齊 | 行數 1~n | 無 | 行號 = 星號數 |
| 右對齊 | 行數 1~n | 前置空格 = n - 行號 | 行號 = 星號數 |
| 置中對稱 | 行數 1~n | 前置空格 = n - 行號 | 左半邊 1~行號,右半邊 1~行號-1 |
| 空心 | 同置中 | 同置中 | 邊緣(首/尾/底)印星號,其餘印空格 |
| 人字形 | 同置中 | 同置中 | 左右兩側各一條斜線 |
Thread.sleep() 與 \r 回車符實現逐行動態顯示。BufferedImage,支援抗鋸齒、畢業色、向量輸出 (SVG/PDF)。此類控制台圖案練習是掌握迴圈邊界條件、空間想像力的經典入門題,建議初學者手寫推演 2-3 階數值變化,養成「腦中跑迴圈」的直覺。