雙色球是中國流行的彩票遊戲,紅球從 1-33 中選 6 個,藍球從 1-16 中選 1 個。復式投注允許選擇超過標準數量的號碼(如選 7-20 個紅球、2-16 個藍球),系統自動生成所有組合。本文展示一個基於 Java AWT 的圖形界面程序,實現復式投注的組合數計算與金額顯示。
復式投注的注數 = C(紅球選擇數, 6) × 藍球選擇數。組合數公式:
C(n, m) = n! / (m! × (n-m)!)
程式中 count(int x, int y) 方法實現此邏輯:x 為紅球選擇數,y 為藍球選擇數,返回總注數。每注 2 元,總金額 = 注數 × 2。
Frame,標題「雙色球復式計算」,固定大小 500×310,不可調整。List 組件,項目 7-20(最少 7 個紅球才能復式),背景橙色。List 組件,項目 1-16,背景藍色。TextArea 顯示計算結果,格式:「X 個紅球加 Y 個藍球 總金額: Z」。事件監聽:
ItemListener 監聽兩個 List 的選擇變化,即時計算並追加結果。ActionListener 處理清除按鈕。WindowAdapter 處理視窗關閉退出程序。// 組合數計算核心
long count(int x, int y) {
long p = 1, c = 1;
for (int i = 1; i <= 6; i++) c *= i; // 6!
for (int j = x - 5; j <= x; j++) p *= j; // x × (x-1) × ... × (x-5)
return (p / c) * y; // C(x,6) × y
}
// 事件驅動計算
h.addItemListener(e -> {
tmp_r = Integer.parseInt(h.getSelectedItem());
});
l.addItemListener(e -> {
tmp_b = Integer.parseInt(l.getSelectedItem());
print(tmp_r, tmp_b);
});
用戶選擇紅球數(如 10)和藍球數(如 3),程式即時顯示:
10個紅球加3個藍球 總金額: 420
(C(10,6)=210,210×3=630 注,630×2=1260 元)
單文件 ssq.java 包含主類 ssq extends Frame,構造函數初始化 UI、註冊監聽、顯示視窗;main 方法啟動程序。適合作為 Java AWT 事件驅動編程、組合數學應用的教學範例。