巢狀迴圈是打印圖案的核心。外層控制行數,內層控制每行內容。
public static void printRectangle(int rows, int cols) {
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
System.out.print("*");
}
System.out.println();
}
}
第 i 行印 i 顆星號:
public static void printLeftTriangle(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++) System.out.print("*");
System.out.println();
}
}
每行先印空格再印星號,空格數 = 總行數 - 當前行數:
public static void printRightTriangle(int n) {
for (int i = 1; i <= n; i++) {
for (int s = 0; s < n - i; s++) System.out.print(" ");
for (int j = 0; j < i; j++) System.out.print("*");
System.out.println();
}
}
空格數隨行數遞增:
public static void printLeftSlantTriangle(int n) {
for (int i = 1; i <= n; i++) {
for (int s = 0; s < i - 1; s++) System.out.print(" ");
System.out.println("*");
}
}
每行:前導空格 + 星號。第 i 行(1-based):空格 n-i,星號 2*i-1。
public static void printIsoscelesTriangle(int n) {
for (int i = 1; i <= n; i++) {
for (int s = 0; s < n - i; s++) System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++) System.out.print("*");
System.out.println();
}
}
行數遞減,星號遞減:
public static void printInvertedIsosceles(int n) {
for (int i = n; i >= 1; i--) {
for (int s = 0; s < n - i; s++) System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++) System.out.print("*");
System.out.println();
}
}
public static void printDiamond(int n) {
// 上半部
for (int i = 1; i <= n; i++) {
for (int s = 0; s < n - i; s++) System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++) System.out.print("*");
System.out.println();
}
// 下半部
for (int i = n - 1; i >= 1; i--) {
for (int s = 0; s < n - i; s++) System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++) System.out.print("*");
System.out.println();
}
}
將邏輯抽象為「每行空格數、星號數」的函式,可輕鬆擴展各種圖案:
public static void printPattern(int rows,
java.util.function.IntFunction spaces,
java.util.function.IntFunction stars) {
for (int i = 1; i <= rows; i++) {
for (int s = 0; s < spaces.apply(i); s++) System.out.print(" ");
for (int j = 0; j < stars.apply(i); j++) System.out.print("*");
System.out.println();
}
}
// 使用範例:等腰三角形
printPattern(5, i -> 5 - i, i -> 2 * i - 1);
掌握巢狀迴圈控制輸出,是邏輯思維訓練的絕佳切入點。