java开发tv上转盘抽奖_java实现大转盘抽奖的简单思路
大转盘抽奖
近期碰到的一个需求,实现一个类似大转盘抽奖的功能,需自定义奖项,各奖项中奖概率,当日抽奖最大次数,抽奖成本等。分享一个简单的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实现大转盘抽奖的简单思路相关推荐
- java 抽奖_JAVA基于权重的抽奖
https://blog.csdn.net/huyuyang6688/article/details/50480687 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果中A:B:C:D的 ...
- Java开发2018年值得学习的10大技术
转载自 Java开发2018年值得学习的10大技术 作为一个开发人员,我们最大的挑战就是保持自己了解新的技术.技术变化很快,你大概每两年就会看到一个新版本的编程语言和框架. 就拿2017年来说,AR. ...
- java开发需要掌握哪些东西_java开发需要掌握哪些技能
1 java开发需要掌握哪些技能 java,互联网发展出来的产物,如今变成了屈指可数的几大编程语言之一,他的未来是不可限量的.因此很多人都想要学会这门技术,希望在以后能有他的一席之地.那么下面小编给大 ...
- java开发面试自我介绍模板_java求职自我介绍范文_java工程师面试个人介绍
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,应聘Java工作时,面试的自我介绍要与岗位接轨.本文是学习啦小编为大家整理的java求职自我介绍范文,仅供参考. java求职自我介绍范文 ...
- java开发oa系统的目的_JAVA开发的OA系统价值体现
根据目前的OA市场,PHP和JAVA各自为政,PHP开发的OA产品主要是用于低价战,但JAVA开发的OA产品大部分集中在高价战.导致产品价格的关键因素:PHP门槛非常低,程序员数量也很多,再通过PHP ...
- java开发一年多少钱_JAVA开发程序员一个月到底能拿多少钱?年薪百万是真是假?...
近年来,在网上只要是薪资排行榜,必然会出现IT行业,IT互联网行业常年在薪资排行榜上高居前三,因此都说程序员是个高薪行业,是个多金行业.既然如此,让我们来看看2020年JAVA开发程序员的薪资水平到底 ...
- java开发环境的建立过程_Java开发环境的搭建及第一个Java程序的创建
Java的几个基本概念: JVM:Java Virtul Machine(Java虚拟机) JRE:Java Runtime Environment(Java运行时环境) JDK:Java Devel ...
- java大数据开发是做什么的_Java转型大数据开发教材,技能储备都在这儿!
如今随着环境的改变,做技术如果不想有中年危机的话,就要知道这句话: 学习新技术,更新自己的知识和技能储备. 最近在北京参加 QCon,看了<QCon 十周年特刊>里面一篇文章,讲了大数据十 ...
- java开发中遇到的问题_java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不 ...
- java开发工程师的晋升路径_Java开发工程师职业发展及晋升路线图
1.Java程序员 这是Java开发工程师的第一阶段了,一般是刚入门Java行业者.这一阶段主要是掌握了一定的Java编程技术,有一定的Java语言基础,能够了解.掌握和编写一定的代码.处在这一阶段的 ...
最新文章
- OpenUPF 功能分析
- OVS sflow(二十六)
- python中1010的二进制_如何用python把任意文件转换为“1010”样子的文本
- boost::strong_components用法的测试程序
- 怎样查看.a和so文件中的接口
- java day18【线程池、Lambda表达式】
- 博文视点读书节第六日丨产品大咖书单阿里云专家直播预告,更有超值代金券手慢无
- 强连通分量(Tarjan)模板
- JSON 之 SuperObject(3): 访问
- Kali Linux上最佳安全测试工具
- Python读取excel画图
- 微信公众号Java开发记录(二)接收、回复消息
- FPGA数字时钟(可暂停调数,含代码)
- mywife.cc 神一样的存在!
- 程序员疯传「编程语言鄙视链」,究竟谁能逃过一劫?
- 关于win10笔记本电脑设置账号密码,但是关闭盖子打开后不进入输入密码界面的解决方法
- 【iTerm】教程 常用命令
- 人工智能识别性格,只需看眼睛便可实现
- 科兴科学园简直是深圳游戏科技园
- gpb编码 c语言,GPIO简介
热门文章
- win10卸载软件通过控制面板
- 解决 联想小新pro16 更换硬盘 重装系统后FN + Q 等命令失效
- MMI_UT洛达检测软件使用,检测1562A
- 基于STM32和ESP8266的天气预报系统
- 高德地图安卓 拖拽选点_高德地图想再造一个大众点评?
- matlab怎么做跳动的桃心曲线,用matlab画跳动的爱心
- 解决iText 5.0.1生成pdf,加入iTextAsian.jar 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'...
- Git 奇淫技巧:Github ID 更名奇遇记
- 亲自动手写爬虫系列三、爬取队列
- 信息系统项目管理师真题2017下半年附答案解析(1)