一个简单的Java抽奖程序

本文逻辑思想比较简单,旨在了解后端如何设计抽奖以及控制抽奖概率。

需求背景

现在奖品池有如下奖品:

序号名称中奖率
0代金券10元20%
1代金券50元14%
2蓝牙耳机10%
3Switch游戏机5%
4iPhone 13Pro1%
5谢谢参与50%

需要设计一个抽奖程序,保证最终的抽奖结果近可能贴近每个奖品的中奖率。

设计思路

首先看看现实生活中的抽奖,如大转盘

img

可以看到每个奖品的中奖概率很大程度决定于中奖区域面积占比。

借鉴线下大转盘抽奖思想,是否能应用到我们的抽奖程序里面呢?

在这里插入图片描述
将上面的圆盘展开可以得到如下图形:
在这里插入图片描述
即:

  • 在区间[0,20]为抽中【代金券10元】
  • 在区间(20,34]为抽中【代金券50元】
  • 在区间(34,44]为抽中【蓝牙耳机】
  • 在区间(44,49]为抽中【Switch游戏机】
  • 在区间(49,50]为抽中【iPhone 13Pro】
  • 在区间(50,100]为抽中【谢谢参与】

基于以上思路,我们可以生成一个0~100的随机数,判断这个随机数落在哪个区间,即抽中哪个区间的奖品。

代码实现

定义奖品及中奖概率

在这里插入图片描述

执行抽奖

在这里插入图片描述

中奖率测试

在这里插入图片描述

测试结果数据

抽奖1000次抽奖5000次抽奖10000次抽奖20000次抽奖50000次抽奖100000次
代金券10元 中奖次数:225,中奖率:22.5%代金券10元 中奖次数:1080,中奖率:21.6%代金券10元 中奖次数:2117,中奖率:21.1%代金券10元 中奖次数:4237,中奖率:21.1%代金券10元 中奖次数:10517,中奖率:21.0%代金券10元 中奖次数:20892,中奖率:20.8%
代金券50元 中奖次数:162,中奖率:16.2%代金券50元 中奖次数:729,中奖率:14.5%代金券50元 中奖次数:1341,中奖率:13.4%代金券50元 中奖次数:2756,中奖率:13.7%代金券50元 中奖次数:6983,中奖率:13.9%代金券50元 中奖次数:13876,中奖率:13.8%
蓝牙耳机 中奖次数:97,中奖率:9.7%蓝牙耳机 中奖次数:489,中奖率:9.7%蓝牙耳机 中奖次数:1015,中奖率:10.1%蓝牙耳机 中奖次数:1988,中奖率:9.9%蓝牙耳机 中奖次数:4935,中奖率:9.8%蓝牙耳机 中奖次数:9993,中奖率:9.9%
Switch游戏机 中奖次数:39,中奖率:3.9%Switch游戏机 中奖次数:278,中奖率:5.5%Switch游戏机 中奖次数:500,中奖率:5.0%Switch游戏机 中奖次数:1032,中奖率:5.1%Switch游戏机 中奖次数:2421,中奖率:4.8%Switch游戏机 中奖次数:4914,中奖率:4.9%
iPhone 13Pro 中奖次数:13,中奖率:1.3%iPhone 13Pro 中奖次数:47,中奖率:0.9%iPhone 13Pro 中奖次数:109,中奖率:1.0%iPhone 13Pro 中奖次数:187,中奖率:0.9%iPhone 13Pro 中奖次数:506,中奖率:1.0%iPhone 13Pro 中奖次数:1069,中奖率:1.0
谢谢参与 中奖次数:464,中奖率:46.4%谢谢参与 中奖次数:2377,中奖率:47.5%谢谢参与 中奖次数:4918,中奖率:49.1%谢谢参与 中奖次数:9800,中奖率:49.0%谢谢参与 中奖次数:24638,中奖率:49.2%谢谢参与 中奖次数:49256,中奖率:49.2%

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对比一开始理论“中奖率扇形图”可以看出,实际中奖率基本保持稳定且高度接近预期的各奖品中奖率。

相关代码请参考:一个简单的Java抽奖程序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值