本文記錄一個純 Java 控制台程式實現的排球計分系統,遵循國際標準規則:五局三勝、每局 25 分(決勝局 15 分)、必須領先 2 分、平分後繼續直至領先 2 分。代碼採用靜態數組存儲比分、Scanner 交互、靜態方法封裝邏輯,適合初學者理解流程控制、數組操作、用戶交互基礎語法。
// scoreArr[局數][隊伍] 存儲每局雙方得分 static int[][] scoreArr = new int[5][2]; // result[局數] 存儲每局最終結果字符串 static String[] result = new String[5]; // 隊伍獲局數統計 static int team1Wins = 0, team2Wins = 0;
package volleyball;
import java.util.Scanner;
public class VolleyballScoringSystem {
static Scanner sc = new Scanner(System.in);
static int[][] scoreArr = new int[5][2];
static String[] result = new String[5];
static int team1Wins = 0, team2Wins = 0;
public static void main(String[] args) {
printWelcome();
for (int set = 0; set < 5; ) {
System.out.println("\n請選擇操作:1.開始計分 2.查詢局數 3.退出系統");
int choice = sc.nextInt();
switch (choice) {
case 1:
System.out.println("=== 第 " + (set + 1) + " 局開始 ===");
playSet(set);
set++;
break;
case 2:
querySet();
break;
case 3:
printFinalResult();
return;
default:
System.out.println("輸入錯誤,請重新輸入。");
}
}
// 5 局結束自動輸出最終結果
printFinalResult();
}
// 單局計分邏輯
static void playSet(int setIndex) {
int target = (setIndex == 4) ? 15 : 25; // 第5局15分,其餘25分
int t1 = 0, t2 = 0; // 本局臨時得分
int round = 0;
while (true) {
System.out.print("請輸入得分方 (1.中國隊 2.美國隊): ");
int team = sc.nextInt();
if (team == 1) t1++;
else if (team == 2) t2++;
else { System.out.println("輸入無效"); continue; }
round++;
System.out.println("第 " + round + " 輪結束,當前比分: " + t1 + " : " + t2);
// 勝負判定:達到目標分且領先2分
if ((t1 >= target || t2 >= target) && Math.abs(t1 - t2) >= 2) {
scoreArr[setIndex][0] = t1;
scoreArr[setIndex][1] = t2;
if (t1 > t2) {
result[setIndex] = "第 " + (setIndex+1) + " 局: " + t1 + ":" + t2 + " 中國隊獲勝";
team1Wins++;
} else {
result[setIndex] = "第 " + (setIndex+1) + " 局: " + t1 + ":" + t2 + " 美國隊獲勝";
team2Wins++;
}
System.out.println(result[setIndex]);
// 提前結束判定:某隊已贏3局
if (team1Wins == 3 || team2Wins == 3) {
System.out.println("比賽結束!");
printFinalResult();
System.exit(0);
}
return; // 結束本局
}
}
}
static void querySet() {
System.out.print("請輸入要查詢的局數 (1-5): ");
int q = sc.nextInt();
if (q < 1 || q > 5) { System.out.println("局數範圍 1-5"); return; }
if (result[q-1] == null) System.out.println("該局尚未開始。");
else System.out.println(result[q-1]);
}
static void printWelcome() {
System.out.println("========================================");
System.out.println(" 歡迎使用排球比賽計分系統");
System.out.println(" 規則:五局三勝,前4局25分,決勝局15分");
System.out.println(" 必須領先2分;平分後繼續至領先2分");
System.out.println("========================================");
}
static void printFinalResult() {
System.out.println("\n=== 比賽最終結果 ===");
for (String r : result) {
if (r != null) System.out.println(r);
}
System.out.println("總局分: 中國隊 " + team1Wins + " : " + team2Wins + " 美國隊");
if (team1Wins > team2Wins) System.out.println("🏆 中國隊獲得最終勝利!");
else System.out.println("🏆 美國隊獲得最終勝利!");
System.out.println("感謝使用,再見!");
}
}
========================================
歡迎使用排球比賽計分系統
規則:五局三勝,前4局25分,決勝局15分
必須領先2分;平分後繼續至領先2分
========================================
請選擇操作:1.開始計分 2.查詢局數 3.退出系統
1
=== 第 1 局開始 ===
請輸入得分方 (1.中國隊 2.美國隊): 1
第 1 輪結束,當前比分: 1 : 0
...
第 25 輪結束,當前比分: 25 : 23
第 1 局: 25:23 中國隊獲勝
請選擇操作:1.開始計分 2.查詢局數 3.退出系統
2
請輸入要查詢的局數 (1-5): 1
第 1 局: 25:23 中國隊獲勝
...
| 亮點 | 不足/可優化 |
|---|---|
| 規則邏輯清晰:目標分動態、領先判定獨立 | 靜態變量耦合高,難以單元測試 |
| 交互菜單靈活:支援中途查詢、退出 | 無輸入驗證(非數字會拋異常) |
| 提前結束優化:某隊贏3局即停止 | 無持久化,重啟數據丟失 |
| 單文件可運行,零依賴 | 控制台交互不適合 Web/移動端 |
這個排球計分系統雖簡單,但完整演示了**需求分析→數據建模→流程控制→交互邏輯→邊界判定**的完整開發微循環。初學者可通過修改規則參數(如改為乒乓球 11 分制)、添加輸入驗證、重構為 OO 設計,逐步掌握從「能跑通」到「好維護」的代碼進化之路。