以 5 行正金字塔為例:
| 行數 | 空格數 | 星號數 | 規律 |
|---|---|---|---|
| 1 | 4 | 1 | 空格 = 總行 - 當前行,星號 = 2×行 - 1 |
| 2 | 3 | 3 | |
| 3 | 2 | 5 | |
| 4 | 1 | 7 | |
| 5 | 0 | 9 |
import java.util.Scanner;
public class Pyramid {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
entrance();
}
static void entrance() {
System.out.println("請選擇(0-正金字塔,1-倒金字塔,2-菱形):");
String sel = input.nextLine();
if (!sel.matches("\\d+")) { error(); return; }
switch (Integer.parseInt(sel)) {
case 0 -> upright();
case 1 -> inverted();
case 2 -> diamond();
default -> { System.out.println("選項錯誤"); entrance(); }
}
}
static void upright() {
int rows = readRows(); if (rows <= 0) return;
for (int i = 1; i <= rows; i++) {
printSpaces(rows - i);
printStars(2 * i - 1);
System.out.println();
}
done();
}
static void inverted() {
int rows = readRows(); if (rows <= 0) return;
for (int i = rows; i >= 1; i--) {
printSpaces(rows - i);
printStars(2 * i - 1);
System.out.println();
}
done();
}
static void diamond() {
int rows = readRows(); if (rows <= 0) return;
// 上半部
for (int i = 1; i <= rows; i++) {
printSpaces(rows - i);
printStars(2 * i - 1);
System.out.println();
}
// 下半部(不含中間行)
for (int i = rows - 1; i >= 1; i--) {
printSpaces(rows - i);
printStars(2 * i - 1);
System.out.println();
}
done();
}
static int readRows() {
System.out.print("請輸入行數:");
String s = input.nextLine();
if (!s.matches("\\d+")) { error(); return -1; }
return Integer.parseInt(s);
}
static void printSpaces(int n) { for (int i = 0; i < n; i++) System.out.print(" "); }
static void printStars(int n) { for (int i = 0; i < n; i++) System.out.print("★"); }
static void error() { System.out.println("輸入非數字,請重新輸入"); }
static void done() { System.out.println("列印完成"); }
}
printSpaces/printStars 方法,主迴圈清晰可讀print 不換行,println 換行matches("\\d+") 防呆