实现权重抽奖算法(java)

1. 算法思想

  1. 为了完成随机抽取一个奖品的目的,我们需要在奖品对应的实体中有相应的权重字段,用来区别限制某种奖品对应的被抽中的概率。
  2. 首先要遍历全部奖品,将权重进行加合。要始终保证奖品列表的索引不发生变化,这样确定了抽中的奖品能够正确对应。
  3. 产生一个Double型的随机数。这个随机数是最后抽奖得到的奖品索引。
  4. 计算每个奖项对应的概率区间,以1为例,若一等奖的权重为10%,那么我们得到的区间为0<myRadom<0.1时,获得一等奖。
  5. 以此类推,索引随机数myRandom对应的值随机生成的左右区间为[前一个奖品获奖概率,后一个奖品的获奖概率]。

2. 算法实现

   public int randomPrize(List<PrizeVo> prizes) {DecimalFormat df = new DecimalFormat("######0.00");int random = -1;try {//计算权重和double sum = 0;for (PrizeVo p : prizes) {sum += p.getPrizeWeight();}//产生索引随机数double myRandom;myRandom = Math.random();//根据随机数在所有奖品分布的区域并确定所抽奖品double pro1 = 0;double pro2 = 0;for (int i = 0; i < prizes.size(); i++) {pro2 += Double.parseDouble(String.valueOf(prizes.get(i).getPrizeWeight())) / sumWeight;if (i == 0) {pro1 = 0;} else {pro1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getPrizeWeight())) / sumWeight;}if (myRandom >= pro1 && myRandom <= pro2) {random = i;break;}}} catch (Exception e) {System.out.println("抽奖出错" + e.getMessage());}return random;}

3. 应用实例

  1. 奖品实体代码

    package tech.niua.admin.vo;import lombok.Builder;
    import lombok.Data;
    @Data
    public class PrizeVo {private Long id;private String title;private String bgImg;private String rule;private String prize;private String prizeImg;private Integer prizeWeight;private String code;}
    
  2. Service实现层代码

     @Overridepublic PrizeVo LuckRandom(List<PrizeVo> prizeList){PrizeRandomTest a = new PrizeRandomTest();List<PrizeVo> prizes=prizeList;int selected=a.randomPrize(prizes);return prizes.get(selected);}
    

实现权重抽奖算法(java)相关推荐

  1. java加权随机数抽奖_java版根据权重抽奖算法

    根据权重进行抽取的算法应用比较广泛,其中抽奖便是主要用途之一.正好这几天也正在进行抽奖模块的开发,整个抽奖模块涉及到的地方大概有三处,分别是后台进行奖品的添加(同时设置权重和数量),前台根据后台配置生 ...

  2. java转盘旋转算法,转盘抽奖算法(java)

    转盘抽奖算法(java) public class LuckDraw { public int getPrizeIndex(List prizes) throws Exception { int ra ...

  3. java 权重_java实现权重随机算法

    权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: im ...

  4. java实现权重随机算法

    权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: im ...

  5. 权重随机算法的java实现

    一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...

  6. java实现抽奖游戏_Java实现游戏抽奖算法

    常用抽奖算法对比 基础的游戏抽奖算法通常要求实现在指定奖品的集合中,每个奖品根据对对应概率进行抽取.个人了解的主要有以下几中抽奖算法: 随机数一一对应 算法思想 这种算法思想最为简单.将n个奖品编号0 ...

  7. java 抽奖算法_Java抽奖算法第二例

    本文实例为大家分享了java抽奖算法,供大家参考,具体内容如下 1. 算法分析 根据概率将奖品划分区间,每个区间代表一个奖品,然后抽取随机数,反查落在那个区间上,即为所抽取的奖品. 2. 代码核心算法 ...

  8. 游戏抽奖网站用java怎么做,Java实现游戏抽奖算法

    常用抽奖算法对比 基础的游戏抽奖算法通常要求实现在指定奖品的集合中,每个奖品根据对对应概率进行抽取.个人了解的主要有以下几中抽奖算法: 随机数一一对应 算法思想 这种算法思想最为简单.将n个奖品编号0 ...

  9. 抽奖算法 中奖算法 权重随机算法实现 中奖概率实现方式 无需配置中奖概率 自我实现

    封装好的工具类 /*** 随机工具** @author cc* @date 2021/5/18*/ public class RandomUtil {private static final int ...

最新文章

  1. VScode 插件、配置记录
  2. python 字符串部分总结
  3. Ubuntu安装pygame的过程记录与分享(包括python的卸载,openssl的安装,python3.7的安装,pygame的安装)
  4. Boost:等待和通知操作的模糊测试
  5. EntityFramework(EF)贪婪加载和延迟加载的选择和使用
  6. Android之提示androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerV
  7. 武汉大学计算机系学哪些专业,武汉大学最好的专业是什么(10大热门专业排名)...
  8. Hibernate之关联映射
  9. Spring Boot : Spring boot 的 AutoConfigurationImportSelector 自动配置原理
  10. 资源成本双优化!看 Serverless 颠覆编程教育的创新实践
  11. 关于团队合作开发项目时的沟通问题!(不仅要注意【相关机能】,还要注意【相似功能】)
  12. java json data_java中json数据格式的处理
  13. 礼县职业中等专业学校计算机,礼县职业中等专业学校
  14. sif一线通输出协议以及代码实现
  15. 区块链开源代码什么意思_区块链和开源社区有什么共同点
  16. mysql auto_increment 原理_MySQL auto_increment间隙问题
  17. 实时风控引擎项目部署
  18. adf的主要功能之一是_ADF 入门第一步系列
  19. matlab生成随机数,matlab随机数生成方法
  20. 复旦大学计算机专硕学制几年,复旦大学硕士研究生学制是几年

热门文章

  1. Lambertian 反射(也叫理想散射)
  2. 修改谷歌浏览器ua的简单方法
  3. 入坑树莓派——进阶(DS18B20温度传感器)
  4. 不同安卓模拟器连接appium的端口
  5. 看google如何招人
  6. mysql可以存储拼音吗_MySQL汉字变换拼音(存储函数)
  7. 股权转让是什么?如何股权转让?
  8. 膳食营养与健康类毕业论文文献都有哪些?
  9. 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?Link ID=135170 中的 about_Execution_Policies
  10. 关于最近word模板以及word转pdf的总结