Java实战 | 手把手教你编写双色球模拟系统中奖逻辑(附源码解析)

一、引言

双色球作为国内经典彩票玩法,其核心逻辑是号码匹配与中奖规则判断。本文将用 Java语言 实现一个简易双色球模拟系统,涵盖用户投注、随机开奖、中奖匹配等功能,并深入解析代码实现中的关键点。文末提供完整源码,适合Java初学者练手学习!


二、功能概述

  1. 用户投注

    • 输入6个红球(1-33)和1个蓝球(1-16),号码不可重复。

  2. 随机开奖

    • 系统生成6个红球+1个蓝球作为中奖号码。

  3. 中奖判断

    • 根据红球和蓝球的匹配数量,输出中奖等级(共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学习者参考。如果你有其他优化建议,欢迎在评论区探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值