一、引言
双色球作为国内经典彩票玩法,其核心逻辑是号码匹配与中奖规则判断。本文将用 Java语言 实现一个简易双色球模拟系统,涵盖用户投注、随机开奖、中奖匹配等功能,并深入解析代码实现中的关键点。文末提供完整源码,适合Java初学者练手学习!
二、功能概述
-
用户投注
-
输入6个红球(1-33)和1个蓝球(1-16),号码不可重复。
-
-
随机开奖
-
系统生成6个红球+1个蓝球作为中奖号码。
-
-
中奖判断
-
根据红球和蓝球的匹配数量,输出中奖等级(共6个奖项)。
import java.util.Random; import java.util.Scanner; public class DoubleColorBallSystem { public static void main(String[] args) { // 用户投注号码 int[] userNumbers = getUserNumbers(); // 系统生成中奖号码 int[] winningNumbers = generateWinningNumbers(); // 打印用户号码和中奖号码 System.out.print("您的投注号码:"); printNumbers(userNumbers); System.out.print("本期中奖号码:"); printNumbers(winningNumbers); // 判断中奖等级 checkPrize(userNumbers, winningNumbers); } // 打印数组(优化输出格式) public static void printNumbers(int[] numbers) { System.out.print("红球["); for (int i = 0; i < 6; i++) { System.out.print(numbers[i] + (i < 5 ? "," : "")); } System.out.println("] 蓝球[" + numbers[6] + "]"); } // 用户输入投注号码(优化输入提示和校验逻辑) public static int[] getUserNumbers() { Scanner sc = new Scanner(System.in); int[] numbers = new int[7]; // 输入红球(1-33,不重复) System.out.println("--- 请输入6个红球号码(1-33)---"); for (int i = 0; i < 6; i++) { while (true) { System.out.print("红球" + (i + 1) + ": "); int num = sc.nextInt(); if (num < 1 || num > 33) { System.out.println("错误:请输入1-33之间的数字!"); } else if (isDuplicate(numbers, num, i)) { System.out.println("错误:号码重复!"); } else { numbers[i] = num; break; } } } // 输入蓝球(1-16) System.out.println("--- 请输入1个蓝球号码(1-16)---"); while (true) { System.out.print("蓝球: "); int num = sc.nextInt(); if (num >= 1 && num <= 16) { numbers[6] = num; break; } System.out.println("错误:请输入1-16之间的数字!"); } return numbers; } // 检查数组中是否存在重复值(优化方法名和逻辑) private static boolean isDuplicate(int[] arr, int target, int currentIndex) { for (int i = 0; i < currentIndex; i++) { if (arr[i] == target) { return true; } } return false; } // 生成中奖号码(修复红球生成逻辑和蓝球范围错误) public static int[] generateWinningNumbers() { Random r = new Random(); int[] numbers = new int[7]; // 生成红球(1-33,不重复) for (int i = 0; i < 6; i++) { int num; do { num = r.nextInt(33) + 1; } while (isDuplicate(numbers, num, i)); numbers[i] = num; } // 生成蓝球(1-16) numbers[6] = r.nextInt(16) + 1; return numbers; } // 判断中奖等级(优化条件分支和输出信息) public static void checkPrize(int[] userNumbers, int[] winningNumbers) { int redMatch = 0; boolean blueMatch = (userNumbers[6] == winningNumbers[6]); // 统计红球匹配数量 for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { if (userNumbers[i] == winningNumbers[j]) { redMatch++; break; } } } // 根据规则输出中奖等级 System.out.println("\n--- 中奖结果 ---"); System.out.println("红球匹配数: " + redMatch + ",蓝球" + (blueMatch ? "命中" : "未命中")); if (redMatch == 6 && blueMatch) { System.out.println("🎉 一等奖!奖金500万!"); } else if (redMatch == 6) { System.out.println("🎉 二等奖!奖金100万!"); } else if (redMatch == 5 && blueMatch) { System.out.println("🎉 三等奖!奖金3000元!"); } else if (redMatch == 5 || (redMatch == 4 && blueMatch)) { System.out.println("🎉 四等奖!奖金200元!"); } else if (redMatch == 4 || (redMatch == 3 && blueMatch)) { System.out.println("🎉 五等奖!奖金10元!"); } else if (blueMatch) { System.out.println("🎉 六等奖!奖金5元!"); } else { System.out.println("😭 未中奖,再接再厉!"); } } }
运行效果截图
--- 请输入6个红球号码(1-33)--- 红球1: 5 红球2: 12 ...(用户输入完成) --- 请输入1个蓝球号码(1-16)--- 蓝球: 9 您的投注号码:红球[5,12,7,24,30,8] 蓝球[9] 本期中奖号码:红球[5,12,18,24,30,33] 蓝球[9] --- 中奖结果 --- 红球匹配数: 4,蓝球命中 🎉 五等奖!奖金10元!
总结
本文提供了一套完整的双色球模拟系统代码,涵盖输入校验、随机生成、中奖判断等核心功能。适合Java学习者参考。如果你有其他优化建议,欢迎在评论区探讨!
-