java简单实现双色球彩票模拟实例(数组、排序、方法、随机数、键盘输入)

一、双色球游戏的玩法说明:双色球投注区分为红色号码区和蓝色号码区,红色号码区范围为01~33,蓝色号码区范围为01~16。双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即时竞猜开奖号码的6个红球号码和1个蓝球 号码,顺序不限。奖级图:二、案例分析:1、如何产生蓝球和红球? 2、如何接收用户选号? 3、如何验证是否中奖? 4、公布本期中奖号码?三、宏观设
摘要由CSDN通过智能技术生成

一、双色球游戏的玩法说明:

双色球投注区分为红色号码区和蓝色号码区,红色号码区范围为01~33,蓝色号码区范围为01~16。双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即时竞猜开奖号码的6个红球号码和1个蓝球 号码,顺序不限。

奖级图:

这里写图片描述

二、案例分析:

1、如何产生蓝球和红球?
2、如何接收用户选号?
3、如何验证是否中奖?
4、公布本期中奖号码?

三、总体设计:

1、整体实现思路
2、随机取值不重复算法(系统和用户)
3、判断是否中奖的逻辑
4、结果输出

四、详细设计及解答案例分析:

1、整体实现思路

  • 定义相关变量
  • 用户选择方式:1.机选,2.手选
  • 接收用户选择号码(6红,1蓝)
  • 生成系统号码(6红,1蓝)
  • 比较用户号码和系统号码,记录相同个数
  • 验证是否中奖
  • 系统号码排序
  • 公布结果

2、随机取值不重复算法(系统和用户)
首先把红球放在一个数组里(1-33),我们叫它redBall,在这里边随机取红球。我们先取出一个,把 这个球赋给系统红球(用户红球),然后把这个球的下标记录下来和最后一个交换位置,最后红球的长度-1,即最后一个不再取,也就是说我们取得这个数不再取了;取第二个的时候最后的红球的长度-1-1,取第三个的时候最后的红球的长度-1-2。我们可以直接理解成:

redBall.length-1-i

其中 i 就是取到第几个球。


不重复的生成随机数代码:

public static void computerSeletion(int[] redBall,int[] userRedBall){
        Random ran = new Random();
        int index = -1;
        for (int i = 0; i < userRedBall.length; i++) {
            index = ran.nextInt(redBall.length-i);
            userRedBall[i] = redBall[index];
            int temp = redBall[index];

            redBall[index] = redBall[redBall.length-1-i];
            redBall[redBall.length-1-i] = temp;
        }
    }

代码中有int index=-1就是取走后的位置先设为-1。

3、统计红球和蓝球的中奖个数

此阶段统计红球的方法和产生不重复的随机数类似,为了高效率,如果有中奖号码,下一轮我们就不再比较此中奖号码,相关代码是:

for (int i = 0; i < userRedBall.length-redCount; i++) {
    for (int j = 0; j < sysRedBall.length; j++) {
        if(userRedBall[i]==sysRedBall[j]){
            int temp = sysRedBall[j];
            sysRedBall[j] = sysRedBall[sysRedBall.length-1-redCount];
            sysRedBall[sysRedBall.length-1-redCount] = temp;
            redCount++;
        }
    }
}

因为中奖的蓝球数只有一个,所以blueCount = 1即可

if(userBlueBall==sysBlueBall){
    blueCount = 1;
}

4、判断是否中奖的逻辑

我们都知道彩票的中奖率还是非常

  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值