根据概率抽奖(无奖品数量) -- Java实现
来源:互联网 发布:直播声音软件 编辑:程序博客网 时间:2024/05/19 21:18
import java.math.BigDecimal;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @PACKAGE_NAME.Test * 日期: 2017/5/3 * 描述: */public class Test { /** * 所有所有奖品 */ public enum Trophy { A("奖品-A", new BigDecimal(0.889)), B("奖品-B", new BigDecimal(0.1)), C("奖品-C", new BigDecimal(0.01)), D("奖品-D", new BigDecimal(0.001)),; public String name; public BigDecimal probably; Trophy(String name, BigDecimal probably) { this.name = name; this.probably = probably; } } /** * 获取一个随机数 * * @param min 最大值 * @param max 最小值 * @return */ public int getRandomInt(int min, int max) { return (int) Math.round(Math.random() * (max - min) + min); } /** * 获取随机数的最大值 * * @param trophies 所有奖品 * @return */ public int getMaxRandomInt(List<Trophy> trophies) { BigDecimal minProbably = trophies.stream().min((x, y) -> x.probably.compareTo(y.probably)).get().probably; String[] split = (minProbably.doubleValue() + "").trim().split("\\."); return (int) Math.pow(10, split[split.length - 1].length()); } /** * 抽奖 * * 随机一个数,判断在哪个奖品的区间内 * * @return */ public Trophy draw() { Trophy trophy = null; int maxInt = getMaxRandomInt(Arrays.asList(Trophy.values())); int random = getRandomInt(1, maxInt), start = 0; for (Trophy trophy1 : Trophy.values()) { int end = start + (int) (trophy1.probably.doubleValue() * maxInt); if (random > start && random <= end) { trophy = trophy1; break; } else { start = end; } } return trophy; } @org.junit.Test public void test() { List<Trophy> trophyList = new ArrayList<>(); for (int i = 0; i < 10000; i++) { Trophy trophy = draw(); if (trophy != null) { trophyList.add(trophy); } } //计算各个抽中次数 for (Trophy trophy : Trophy.values()) { System.out.println("抽中 " + trophy.name + " 数量:" + trophyList.stream().filter(trophy1 -> trophy1.equals(trophy)).count()); } }}
0 0
- 根据概率抽奖(无奖品数量) -- Java实现
- Java根据概率、剩余奖品数量动态抽奖算法实现,概率总和可以不为100%
- Java根据奖品权重计算中奖概率实现抽奖
- 【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)
- Java 实现根据权重设置抽奖概率
- .net 指定奖品概率随机抽奖功能实现
- js 计算奖品概率抽奖
- java实现一个抽奖概率类
- java实现一个抽奖概率类
- 实现不等概率抽奖
- java抽奖概率
- jquery实现转盘抽奖--基于奖品转动的转盘
- C#&PHP&Java实现Alias Method概率抽奖算法
- 实现不同概率抽奖功能
- 实现不同概率抽奖功能
- 转盘抽奖插件概率实现
- 项目4:抽奖程序 分时间段(按时段设置的奖品数为概率)
- PHP+jQuery实现翻板抽奖(中奖概率算法)
- QCom MSM MDP显示驱动一些点的简记
- 【Java重构系列】重构31式之封装集合
- MongoDB dropDatabse后,数据能恢复么?
- 项目属性配置
- java实现(3)-堆
- 根据概率抽奖(无奖品数量) -- Java实现
- 创建很简单的maven项目
- react之redux新手入门
- Linux JDK 安装与卸载(Redhat)
- 【软考】算法-冒泡
- C语言8大经典排序算法代码和详细注释
- Mask-RCNN中的损失函数
- http的post和get请求方式
- 图说二叉树添加数据原理以及遍历原理