如何不使用循环与数组实现乐透号码的无序匹配判断?
实现无循环无数组的乐透无序匹配判断
核心思路
因为禁止使用循环和数组,我们只能通过逐个变量存储随机数和用户输入,并通过逻辑判断验证每个用户输入的号码是否存在于随机数集合中,同时确保双方的号码都无重复(符合乐透规则)。具体步骤:
- 生成6个不重复的1-55随机数,用嵌套
if处理重复问题(替代循环); - 获取用户输入的6个号码,逐个验证范围和重复性;
- 检查每个用户号码是否都在随机数里,同时双方号码无重复,满足则判定中奖。
完整代码示例
import java.util.Random; import java.util.Scanner; public class LottoGame { public static void main(String[] args) { Random random = new Random(); // 生成6个不重复的随机数(1-55),用if避免重复 int r1 = random.nextInt(55) + 1; int r2 = random.nextInt(55) + 1; if (r2 == r1) { r2 = random.nextInt(55) + 1; if (r2 == r1) { r2 = random.nextInt(55) + 1; } } int r3 = random.nextInt(55) + 1; if (r3 == r1 || r3 == r2) { r3 = random.nextInt(55) + 1; if (r3 == r1 || r3 == r2) { r3 = random.nextInt(55) + 1; } } int r4 = random.nextInt(55) + 1; if (r4 == r1 || r4 == r2 || r4 == r3) { r4 = random.nextInt(55) + 1; if (r4 == r1 || r4 == r2 || r4 == r3) { r4 = random.nextInt(55) + 1; } } int r5 = random.nextInt(55) + 1; if (r5 == r1 || r5 == r2 || r5 == r3 || r5 == r4) { r5 = random.nextInt(55) + 1; if (r5 == r1 || r5 == r2 || r5 == r3 || r5 == r4) { r5 = random.nextInt(55) + 1; } } int r6 = random.nextInt(55) + 1; if (r6 == r1 || r6 == r2 || r6 == r3 || r6 == r4 || r6 == r5) { r6 = random.nextInt(55) + 1; if (r6 == r1 || r6 == r2 || r6 == r3 || r6 == r4 || r6 == r5) { r6 = random.nextInt(55) + 1; } } Scanner scanner = new Scanner(System.in); // 获取用户输入的6个号码,逐个验证范围和重复性 System.out.print("请输入第1个1-55之间的号码:"); int u1 = scanner.nextInt(); if (u1 < 1 || u1 > 55) { System.out.print("号码无效,请重新输入第1个号码:"); u1 = scanner.nextInt(); } System.out.print("请输入第2个1-55之间的号码:"); int u2 = scanner.nextInt(); if (u2 < 1 || u2 > 55 || u2 == u1) { System.out.print("号码无效(范围错误或重复),请重新输入第2个号码:"); u2 = scanner.nextInt(); if (u2 < 1 || u2 > 55 || u2 == u1) { System.out.print("再次错误,重新输入第2个号码:"); u2 = scanner.nextInt(); } } System.out.print("请输入第3个1-55之间的号码:"); int u3 = scanner.nextInt(); if (u3 < 1 || u3 > 55 || u3 == u1 || u3 == u2) { System.out.print("号码无效(范围错误或重复),请重新输入第3个号码:"); u3 = scanner.nextInt(); if (u3 < 1 || u3 > 55 || u3 == u1 || u3 == u2) { System.out.print("再次错误,重新输入第3个号码:"); u3 = scanner.nextInt(); } } System.out.print("请输入第4个1-55之间的号码:"); int u4 = scanner.nextInt(); if (u4 < 1 || u4 > 55 || u4 == u1 || u4 == u2 || u4 == u3) { System.out.print("号码无效(范围错误或重复),请重新输入第4个号码:"); u4 = scanner.nextInt(); if (u4 < 1 || u4 > 55 || u4 == u1 || u4 == u2 || u4 == u3) { System.out.print("再次错误,重新输入第4个号码:"); u4 = scanner.nextInt(); } } System.out.print("请输入第5个1-55之间的号码:"); int u5 = scanner.nextInt(); if (u5 < 1 || u5 > 55 || u5 == u1 || u5 == u2 || u5 == u3 || u5 == u4) { System.out.print("号码无效(范围错误或重复),请重新输入第5个号码:"); u5 = scanner.nextInt(); if (u5 < 1 || u5 > 55 || u5 == u1 || u5 == u2 || u5 == u3 || u5 == u4) { System.out.print("再次错误,重新输入第5个号码:"); u5 = scanner.nextInt(); } } System.out.print("请输入第6个1-55之间的号码:"); int u6 = scanner.nextInt(); if (u6 < 1 || u6 > 55 || u6 == u1 || u6 == u2 || u6 == u3 || u6 == u4 || u6 == u5) { System.out.print("号码无效(范围错误或重复),请重新输入第6个号码:"); u6 = scanner.nextInt(); if (u6 < 1 || u6 > 55 || u6 == u1 || u6 == u2 || u6 == u3 || u6 == u4 || u6 == u5) { System.out.print("再次错误,重新输入第6个号码:"); u6 = scanner.nextInt(); } } // 验证随机数无重复(双重保险) boolean randomNoDuplicate = (r1 != r2) && (r1 != r3) && (r1 != r4) && (r1 != r5) && (r1 != r6) && (r2 != r3) && (r2 != r4) && (r2 != r5) && (r2 != r6) && (r3 != r4) && (r3 != r5) && (r3 != r6) && (r4 != r5) && (r4 != r6) && (r5 != r6); // 验证每个用户号码都存在于随机数中 boolean u1Match = (u1 == r1) || (u1 == r2) || (u1 == r3) || (u1 == r4) || (u1 == r5) || (u1 == r6); boolean u2Match = (u2 == r1) || (u2 == r2) || (u2 == r3) || (u2 == r4) || (u2 == r5) || (u2 == r6); boolean u3Match = (u3 == r1) || (u3 == r2) || (u3 == r3) || (u3 == r4) || (u3 == r5) || (u3 == r6); boolean u4Match = (u4 == r1) || (u4 == r2) || (u4 == r3) || (u4 == r4) || (u4 == r5) || (u4 == r6); boolean u5Match = (u5 == r1) || (u5 == r2) || (u5 == r3) || (u5 == r4) || (u5 == r5) || (u5 == r6); boolean u6Match = (u6 == r1) || (u6 == r2) || (u6 == r3) || (u6 == r4) || (u6 == r5) || (u6 == r6); // 输出结果 System.out.println("\nRandom Number: " + r1 + "," + r2 + "," + r3 + "," + r4 + "," + r5 + "," + r6); if (randomNoDuplicate && u1Match && u2Match && u3Match && u4Match && u5Match && u6Match) { System.out.println("System: You Win!"); } else { System.out.println("System: You Lose"); } scanner.close(); } }
关键逻辑说明
- 随机数去重:通过嵌套
if判断新生成的随机数是否与已有的重复,若重复则重新生成(虽然无法100%避免极端重复情况,但概率极低,符合题目要求); - 用户输入验证:逐个输入号码,用
if判断是否在1-55范围内且不与之前输入的号码重复; - 无序匹配判断:通过逻辑或
||检查每个用户号码是否存在于6个随机数中,同时验证随机数无重复,确保双方是6个完全相同的不重复号码(不考虑顺序)。
内容的提问来源于stack exchange,提问作者hope
相关产品推荐
相关产品推荐

