【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)

  • 时间:
  • 浏览:3

  这里只考虑最简单的抽奖实现,统统暂时只为奖品设计如上有有有两个 字段。

双蛋节(圣诞+元旦)事先 过去,前几天项目上线的砸金蛋活动也圆满开始英语 。

  先生成有有有两个 随机数randomNumber,但是 根据随机数位于区域判断奖品:

  却说活动期间小编报着随时抢救bug的心态,连回家都抱着电脑,然而从活动上线到活动开始英语 ,并这样 突然老出bug~~在此感谢产品部、测试部和研发部所有同事在上线前轰炸式的测试~~

抽奖测试

  奖品在数据库中的存储清况

Java根据奖品权重计算中奖概率实现抽奖http://www.bieryun.com/1035.html

  抽奖的逻辑可不不需要 用下面这张图表示:

  核心算法:

  见注释,prize_name表示奖品名称;prize_amount表示奖品数量,即本次抽奖活动计划发放此奖品的数量;prize_weight表示奖品权重,表示奖品被抽到的几率的比重,权重越大,被抽到的几率越大,比如本次砸金蛋活动有4种奖品,权重分别是1、2、3、4,总权重是10,这样 每种奖品被抽到的几率却说1/10,2/10,3/10,4/10。

  奖品够富有的哇,香车美女别墅总要了~不过将会法律的原困,活人是不到赠送的,统统一等奖不到送海报了~~

  Tips

  尝试抽奖100000次的结果如下:

  将会计划中奖率是1000%语句,这样 10个奖品不到抽奖10次,统统不到根据实际清况 设置每种奖品数量和权重。

奖品设置

  比如现在举行一次砸金蛋活动中,奖品如下:

抽奖实现

  每类奖品获奖次数比例刚好相当于为1:2:3:4,学过概率的你肯定知道抽奖次数不多,测试结果越准确~~

  奖品实体 Prize.java

  将会不到设置中奖率不为1000%,可不不需要 添加有有有两个 “伪奖品”,并为其设置权重,这样 抽到你这个 “伪奖品”的概率却说不中奖的概率。

  将会在抽奖过程中某类奖品抽完了,可不不需要 做个判断,将会此奖品的剩余数量为0,则重新抽取奖品,直到抽到有些奖品位置。

  现在在有些网站上总要有抽奖的活动,抽奖的算法也是多种多样,这里介绍一下咋样根据每种奖品的权重来抽奖,适用于多种抽奖形式。、

  分析:如上图,为了便于计算和理解,设置每种奖品的权重分别为1,2,3,4,统统被抽到的概率分别为0.1,0.2,0.3,0.4(本次活动中奖概率为1000%)。