You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用循环与数组实现乐透号码的无序匹配判断?

实现无循环无数组的乐透无序匹配判断

核心思路

因为禁止使用循环和数组,我们只能通过逐个变量存储随机数和用户输入,并通过逻辑判断验证每个用户输入的号码是否存在于随机数集合中,同时确保双方的号码都无重复(符合乐透规则)。具体步骤:

  1. 生成6个不重复的1-55随机数,用嵌套if处理重复问题(替代循环);
  2. 获取用户输入的6个号码,逐个验证范围和重复性;
  3. 检查每个用户号码是否都在随机数里,同时双方号码无重复,满足则判定中奖。

完整代码示例

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();
    }
}

关键逻辑说明

  1. 随机数去重:通过嵌套if判断新生成的随机数是否与已有的重复,若重复则重新生成(虽然无法100%避免极端重复情况,但概率极低,符合题目要求);
  2. 用户输入验证:逐个输入号码,用if判断是否在1-55范围内且不与之前输入的号码重复;
  3. 无序匹配判断:通过逻辑或||检查每个用户号码是否存在于6个随机数中,同时验证随机数无重复,确保双方是6个完全相同的不重复号码(不考虑顺序)。

内容的提问来源于stack exchange,提问作者hope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:46:08