大转盘抽奖

近期碰到的一个需求,实现一个类似大转盘抽奖的功能,需自定义奖项,各奖项中奖概率,当日抽奖最大次数,抽奖成本等。分享一个简单的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. OpenUPF 功能分析
  2. OVS sflow(二十六)
  3. python中1010的二进制_如何用python把任意文件转换为“1010”样子的文本
  4. boost::strong_components用法的测试程序
  5. 怎样查看.a和so文件中的接口
  6. java day18【线程池、Lambda表达式】
  7. 博文视点读书节第六日丨产品大咖书单阿里云专家直播预告,更有超值代金券手慢无
  8. 强连通分量(Tarjan)模板
  9. JSON 之 SuperObject(3): 访问
  10. Kali Linux上最佳安全测试工具
  11. Python读取excel画图
  12. 微信公众号Java开发记录(二)接收、回复消息
  13. FPGA数字时钟(可暂停调数,含代码)
  14. mywife.cc 神一样的存在!
  15. 程序员疯传「编程语言鄙视链」,究竟谁能逃过一劫?
  16. 关于win10笔记本电脑设置账号密码,但是关闭盖子打开后不进入输入密码界面的解决方法
  17. 【iTerm】教程 常用命令
  18. 人工智能识别性格,只需看眼睛便可实现
  19. 科兴科学园简直是深圳游戏科技园
  20. gpb编码 c语言,GPIO简介

热门文章

  1. win10卸载软件通过控制面板
  2. 解决 联想小新pro16 更换硬盘 重装系统后FN + Q 等命令失效
  3. MMI_UT洛达检测软件使用,检测1562A
  4. 基于STM32和ESP8266的天气预报系统
  5. 高德地图安卓 拖拽选点_高德地图想再造一个大众点评?
  6. matlab怎么做跳动的桃心曲线,用matlab画跳动的爱心
  7. 解决iText 5.0.1生成pdf,加入iTextAsian.jar 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'...
  8. Git 奇淫技巧:Github ID 更名奇遇记
  9. 亲自动手写爬虫系列三、爬取队列
  10. 信息系统项目管理师真题2017下半年附答案解析(1)