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

Java开发宾果游戏如何避免生成重复的随机号码?

宾果游戏号码去重实现方案

核心思路

提前构造包含1~75所有合法宾果球号的池,提前打乱顺序后按顺序取号,从根源避免重复抽取,性能远优于随机生成后再校验重复的方案,也方便后续扩展多卡片功能时共用抽取序列。

具体改动实现

  1. 删除原有无效的while(c1 != c1)死逻辑(该判断永远为假,不会执行)
  2. 初始化球号池并打乱,按顺序取号即可
  3. 可复用的延时逻辑可以抽成公共方法,减少冗余代码

修正后的完整代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

public class BingoGame {
    // 公共延时方法,减少冗余代码
    private static void sleep5s() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
    }

    public static void main(String[] args) {
        // 这里假设你的b1-b5/i1-i5等变量已经提前初始化赋值
        int b1=1,b2=2,b3=3,b4=4,b5=5;
        int i1=16,i2=17,i3=18,i4=19,i5=20;
        int n1=31,n2=32,n3=33,n4=34,n5=35;
        int g1=46,g2=47,g3=48,g4=49,g5=50;
        int o1=61,o2=62,o3=63,o4=64,o5=65;
        int b=0,i=0,n=0,g=0,o=0;

        // 初始化1-75的球号池
        List<Integer> ballPool = new ArrayList<>();
        for (int num = 1; num <=75; num++) {
            ballPool.add(num);
        }
        // 打乱球号顺序,模拟真实摇球
        Collections.shuffle(ballPool, ThreadLocalRandom.current());
        int drawIndex = 0;
        int Bingo = 0;

        sleep5s();
        while(Bingo == 0 && drawIndex < ballPool.size()) {
            // 按顺序取号,不会重复
            int c1 = ballPool.get(drawIndex);
            drawIndex++;

            if(c1 == b1 || c1 == b2 || c1 == b3 || c1 == b4 || c1 == b5){
                b++;
                System.out.println("B " + c1);
                sleep5s();
            }
            else if(c1 == i1 || c1 == i2 || c1 == i3 || c1 == i4 || c1 == i5){
                i++;
                System.out.println("I " + c1);
                sleep5s();
            }
            else if(c1 == n1 || c1 == n2 || c1 == n3 || c1 == n4 || c1 == n5){
                n++;
                System.out.println("N " + c1);
                sleep5s();
            }
            else if(c1 == g1 || c1 == g2 || c1 == g3 || c1 == g4 || c1 == g5){
                g++;
                System.out.println("G " + c1);
                sleep5s();
            }
            else if(c1 == o1 || c1 == o2 || c1 == o3 || c1 == o4 || c1 == o5){
                o++;
                System.out.println("O " + c1);
                sleep5s();
            }
            // 这里补充Bingo获胜的判断逻辑,满足条件时将Bingo设为1即可退出循环
        }
    }
}

后续扩展建议

如果后续要支持多张卡片,只要共用同一个ballPool的抽取序列即可,所有卡片都基于同一个摇球结果校验,符合真实宾果游戏的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:27:03