Java实现彩票7位号码匹配模拟程序,有无更简便的实现方法?
实现方案
直接用数组+标记法就能解决匹配问题,不需要写几百个if判断,所有逻辑只用你已经学过的循环和基础变量就能实现:
核心优化点
- 不用单独定义7个机选/中奖号码变量,改用两个长度为7的
int数组存储,用循环生成随机数,减少大量重复代码 - 匹配逻辑用「临时数组标记法」解决重复匹配问题,完全不需要嵌套多层if判断
具体实现逻辑
- 每次循环分别给机选数组、中奖数组生成7个1~50的随机整数
- 复制一份中奖号码到临时数组,专门用来标记已经匹配过的号码,避免同一个中奖号被多个机选号重复匹配
- 遍历每一个机选号码,去临时数组里找是否存在相同的号码:
- 找到就把临时数组对应位置的值改成0(1~50之外的数即可,标记为已使用),匹配计数+1
- 如果最终匹配计数等于7,说明两组号码完全一致,终止循环输出结果
完整可运行代码
class ChancesOfLotteryWin { public static void main(String[] args) { // 定义数组存储7个机选号、7个中奖号,用int比double更适合存整数号码 int[] quickPick = new int[7]; int[] winNumbers = new int[7]; // 统计循环次数 int count = 0; // 用do-while循环,符合你当前学到的知识点 do { count++; // 生成7个机选号 for (int i = 0; i < 7; i++) { quickPick[i] = (int) (Math.random() * 50 + 1); } // 生成7个中奖号 for (int i = 0; i < 7; i++) { winNumbers[i] = (int) (Math.random() * 50 + 1); } // 复制中奖号到临时数组,用来标记已匹配的号码 int[] tempWin = new int[7]; for (int i = 0; i < 7; i++) { tempWin[i] = winNumbers[i]; } int matchCount = 0; // 遍历每个机选号,找是否有匹配的未使用中奖号 for (int qp : quickPick) { for (int j = 0; j < 7; j++) { if (tempWin[j] == qp) { matchCount++; tempWin[j] = 0; // 标记为已使用,不会再被匹配 break; } } } // 7个号全部匹配就终止循环 if (matchCount == 7) { // 输出机选号 System.out.print("机选号码:"); for (int num : quickPick) { System.out.print(num + " "); } System.out.println(); // 输出中奖号 System.out.print("中奖号码:"); for (int num : winNumbers) { System.out.print(num + " "); } System.out.println(); // 输出循环次数 System.out.println("匹配成功总循环次数:" + count); break; } } while (true); } }
补充说明
如果对应彩票规则要求7个号码不能重复,只需要在生成随机数的时候加个简单的去重判断即可:生成每个新号码的时候,和之前已经生成的号码对比,如果重复就重新生成。
内容的提问来源于stack exchange,提问作者noobieprogrammer321
相关产品推荐
相关产品推荐

