双色球作为国内经典彩票玩法,其核心逻辑是号码匹配与中奖规则判断。本文将用 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学习者参考。如果你有其他优化建议,欢迎在评论区探讨!