最近碰到一个大转盘的业务,奖品可根据数据后台灵活设置中奖概率,看起来挺简单的业务功能,但实现起来对我这个毫无经验的人来说并不容易,后面又碰到一个根据后台概率随机获取不同概率的档位积分,前面是两个实际中业务要用到的话不多说吧,直接上我写概率工具类吧。
<强> 1:第一种方法强>
/* * *根据概率获取随机积分 * * @param rdm * @return *///这里的参数是一个存储概率集合当然你也可以用数组 公共静态整数randomPoints (ArrayListrdm) { ArrayList cdm=rdm;//这里是将概率集合重组比如0.2 0.3 0.1 0.4四个数据的集合 for (int i=1;我& lt;cdm.size () - 1;我+ +){ 清洁发展机制。集(我cdm.get(我)+清洁发展机制。得到(i - 1)); } cdm.set (cdm.size () - 1, 1.0);//重组后变成0.2 0.5 0.6 1.0四个数据的集合 双randomNumber; randomNumber=math . random ();//随机生成一个0到1的随机数//接下就很简单了你只要循环重组集合如果随机数小于那个值就是返回我就好了 for (int i=0; i< cdm.size();我+ +){ 如果(randomNumber 之前 <强> 2:第二种方法强>
这个是网上找到的原理也是一样不过这里用法比较固定,但效率明显比第一个更高
公开课MathRandom {/* * * 0出现的概率为% 50 */公共静态双rate0=0.50;/* * * 1出现的概率为% 20 */公共静态双rate1=0.20;/* * * 2出现的概率为% 15 */公共静态双rate2=0.15;/* * * 3出现的概率为% 10 */公共静态双rate3=0.10;/* * * 4出现的概率为% 4 */公共静态双rate4=0.04;/* * * 5出现的概率为% 1 */公共静态双rate5=0.01;/* * * math . random()产生一个双型的随机数,判断一下 *例如0出现的概率为% 50,则介于0到0.50中间的返回0 * @return int * */私人int PercentageRandom () { 双randomNumber; randomNumber=math . random (); 如果(randomNumber祝辞=0,,randomNumber & lt;=rate0) { 返回0; } else if (randomNumber祝辞=rate0,,randomNumber & lt;=rate0 + rate1) { 返回1; } else if (randomNumber祝辞=rate0 + rate1 ,,randomNumber & lt;=rate0 + rate1和rate2) { 返回2; } else if (randomNumber祝辞=rate0 + rate1和rate2 ,,randomNumber & lt;=rate0 + rate1和rate2 + rate3) { 返回3; } else if (randomNumber祝辞=rate0 + rate1和rate2 + rate3 ,,randomNumber & lt;=rate0 + rate1和rate2 + rate3 + rate4) { 返回4; } else if (randomNumber祝辞=rate0 + rate1和rate2 + rate3 + rate4 ,,randomNumber & lt;=rate0 + rate1和rate2 + rate3 + rate4 + rate5) { 返回5; } 返回1; } } >之前以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
JAVA生成随机数并根据后台概率灵活生成的实例代码