大转盘抽奖

近期碰到的一个需求,实现一个类似大转盘抽奖的功能,需自定义奖项,各奖项中奖概率,当日抽奖最大次数,抽奖成本等。分享一个简单的java代码的实现的思路,有不足之处感谢各位指正。

设计思路

1.奖品概率

每个奖品的中奖概率各自独立,不必考虑概率总和是否等于1,即:A奖品的概率为100%,B奖品的概率80%的设置方式可以成立;

2.抽奖方式

取出奖品列表(按照中奖概率大小倒序排列)

通过java的Random()方法生成一个0-1的随机数,与设置好的奖品概率循环比较

若随机数小于概率值,则抽中该奖项

换句话说就是按照随机出的数字,概率由小到大,依次中奖

例如:A奖项概率100%,B奖项概率30%,C奖项概率1%,用户点击抽奖,随机数为0.2,此时,先比较C奖,(0.2<0.01)=false,则进入下一个奖项判断,(0.2<0.3)=true 则判断用户中奖B,跳出循环;

3. 奖品处理

一般来说,奖品设置不外乎一下几种类型:

账户余额奖励;

现金奖励();

积分奖励;

虚拟物品奖励(道具,会员等均归为此类)

实物奖励(贵重物品,或需要物流的商品等)

于是,这里推荐写一个”中奖处理器”工厂类,用不同的实现类来分别实现不同类型的奖品的中奖处理逻辑

4. 其他

一些不重要,但必须的注意事项,例如抽奖成本的维护,登陆验证,账户余额判断,根据项目需求而定。

核心代码

1. 奖项设置(大多简单的CUID操作,若项目中关系复杂请妥善思考关联关系,此处不做赘述)

2. 生成随机数(此处为了数据处理方便*100)

Random randomTool = new Random();

Double userSelect = randomTool.nextDouble()*100;

Award award = awardManager.duageAward(userSelect);

3. duageAward方法用很简单的方法来,用来比较概率与随机数大小来判断中奖

for (Award award : awardList) {

if(userSelect < award.getProbability()){

return award;

}

}

4. 奖品发放处理

奖品发放工厂类

public final class SendAwardProcessorFactory {

public static ISendAwardProcessor getProcessor(String awardType){

if("valuables".equals(awardType)){//贵重物品类奖品流程

return SpringContextHolder.getBean("awardForValuablesProcessor");

}

return null;

}

}

通过一个awardType的参数来判断奖品类型,并创建一个处理方式的实例,每一个Processor都是一个处理接口,通过实现类来最终处理奖品发放业务

这里只提供一个笔者采用的思路,作为笔记与交流,有更好的处理方式欢迎指正。

java开发tv上转盘抽奖_java实现大转盘抽奖的简单思路相关推荐

  1. java 抽奖_JAVA基于权重的抽奖

    https://blog.csdn.net/huyuyang6688/article/details/50480687 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果中A:B:C:D的 ...

  2. Java开发2018年值得学习的10大技术

    转载自 Java开发2018年值得学习的10大技术 作为一个开发人员,我们最大的挑战就是保持自己了解新的技术.技术变化很快,你大概每两年就会看到一个新版本的编程语言和框架. 就拿2017年来说,AR. ...

  3. java开发需要掌握哪些东西_java开发需要掌握哪些技能

    1 java开发需要掌握哪些技能 java,互联网发展出来的产物,如今变成了屈指可数的几大编程语言之一,他的未来是不可限量的.因此很多人都想要学会这门技术,希望在以后能有他的一席之地.那么下面小编给大 ...

  4. java开发面试自我介绍模板_java求职自我介绍范文_java工程师面试个人介绍

    Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,应聘Java工作时,面试的自我介绍要与岗位接轨.本文是学习啦小编为大家整理的java求职自我介绍范文,仅供参考. java求职自我介绍范文 ...

  5. java开发oa系统的目的_JAVA开发的OA系统价值体现

    根据目前的OA市场,PHP和JAVA各自为政,PHP开发的OA产品主要是用于低价战,但JAVA开发的OA产品大部分集中在高价战.导致产品价格的关键因素:PHP门槛非常低,程序员数量也很多,再通过PHP ...

  6. java开发一年多少钱_JAVA开发程序员一个月到底能拿多少钱?年薪百万是真是假?...

    近年来,在网上只要是薪资排行榜,必然会出现IT行业,IT互联网行业常年在薪资排行榜上高居前三,因此都说程序员是个高薪行业,是个多金行业.既然如此,让我们来看看2020年JAVA开发程序员的薪资水平到底 ...

  7. java开发环境的建立过程_Java开发环境的搭建及第一个Java程序的创建

    Java的几个基本概念: JVM:Java Virtul Machine(Java虚拟机) JRE:Java Runtime Environment(Java运行时环境) JDK:Java Devel ...

  8. java大数据开发是做什么的_Java转型大数据开发教材,技能储备都在这儿!

    如今随着环境的改变,做技术如果不想有中年危机的话,就要知道这句话: 学习新技术,更新自己的知识和技能储备. 最近在北京参加 QCon,看了<QCon 十周年特刊>里面一篇文章,讲了大数据十 ...

  9. java开发中遇到的问题_java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不 ...

  10. java开发工程师的晋升路径_Java开发工程师职业发展及晋升路线图

    1.Java程序员 这是Java开发工程师的第一阶段了,一般是刚入门Java行业者.这一阶段主要是掌握了一定的Java编程技术,有一定的Java语言基础,能够了解.掌握和编写一定的代码.处在这一阶段的 ...

最新文章

  1. 如何使用netwokx进行复杂网络的中心性分析?
  2. LibSVM学习(二)——第一次体验libSvm
  3. Python 内建函数 max/min的高级用法
  4. Java正则表达式:我最期望弄懂的知识,希望对大家都有帮助
  5. mysql身份验证失败_SMTP身份验证失败PAM-MySQL无法进行身份验证
  6. Django与jQuery通信;Django前后端传值
  7. 自学python好找工作么-学完Python好找工作吗?为什么有人学完找不到工作?
  8. Linux ❉ iptables详解
  9. 华为推送:应用中的百度地图jar包和华为Push SDK中的百度地图相冲突
  10. 共享计算机无法打开文件,Windows7局域网无法打开共享文件分析
  11. Mybatis学习笔记2-配置文件解析
  12. 深入理解5G SSB协议
  13. 两台计算机如何共享文档,两台电脑如何共享文件
  14. vue中使用微信jssdk语音聊天功能
  15. Alexa 排名万能查询系统
  16. 自己碰到的360安全浏览器兼容模式的问题总结
  17. 如何使用python做图_如何使用python做动图
  18. js正则验证身份证号码是否真实有效
  19. oracle索引的事
  20. spring的maven依赖

热门文章

  1. atmega128 单片机 20以内加减法训练机 做的过程
  2. Android Light
  3. 中国科学报:吴文俊的数字之舞
  4. Git 修改commit提交信息
  5. oracle 查询ddl记录,Oracle记录用户DDL操作脚本
  6. OpenCV物体颜色检测(Python)
  7. 大型网站架构技术演进(史上最全)
  8. VRF-Virtual Routing Forwarding
  9. QT之调用百度地图离线API
  10. 自己动手搭建一个简单的基于Hadoop的离线分析系统之一——网络爬虫