Java 实现抽奖

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/liujun03/article/details/80708293

设计思路

1.奖品设计

​ 1️⃣可乐 2️⃣雪碧3️⃣辣条4️⃣咖啡5️⃣现金五毛6️⃣现金一元7️⃣谢谢参与

2.奖品概率问题

​ 首先设计的这个抽奖转盘是必中奖的,其中谢谢参与也是个奖品,而且这个的中奖概率可以设计为最大的。

总概率为100,也就是说这些奖品的中奖概率加起来必须等于100(也可以将总概率设计为1)。

​ 其次我们得考虑到有些奖品的库存为0的话(比如某个奖品被抽完了或者某个10000元现金奖品不想被人抽到),为了保证中奖的概率不变,我们可以将这些库存为0 的奖品的中奖概率叠加到某个奖品上去(比如谢谢参与=-=),这样就保证了总的概率不变的情况下,只自动叠加了某个奖品的中奖概率,而不会影响其余奖品的中奖概率。

3.抽奖实现问题

​ 奖品设计完了,概率也设计好了。那我们该如何实现抽奖的具体的逻辑呢??这里介绍几个小概念:

首先是TreeMap 的tailMap()方法 ==>

 public NavigableMap<K,V> tailMap(K fromKey, boolean inclusive) {
        return new AscendingSubMap<>(this,
                                     false, fromKey, inclusive,
                                     true,  null,    true);
    }
 
 
 

    tailMap(K fromKey, boolean inclusive)方法用于返回其键大于或等于fromKey的部分视图,其中参数inclusive是来控制是否返回键等于formKey的视图的,false表示不返回。

    其次是ThreadLocalRandom ==>

    ThreadLocalRandom.current().nextInt(100)</
    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值