JAVA 生成随机数并根据后台概率灵活生成的实例代码

 更新时间:2017年08月03日 09:26:41   作者:hua18123870251  
本篇文章主要介绍了JAVA 生成随机数并根据后台概率灵活生成的实例代码,具有一定的参考价值,有兴趣的可以了解一下

最近碰到一个大转盘的业务,奖品可根据数据后台灵活设置中奖概率,看起来挺简单的业务功能,但实现起来对我这个毫无经验的人来说并不容易,后面又碰到一个根据后台概率随机获取不同概率的档位积分,前面是两个实际中业务要用到的话不多说吧,直接上我写概率工具类吧。

1:第一种方法

/**
* 根据概率 获取随机积分
* 
* @param rdm
* @return
*/
    //这里的参数是一个存储概率集合当然你也可以用数组
public static Integer randomPoints(ArrayList<Double> rdm) {

   
ArrayList<Double> cdm = rdm;

//这里是将概率集合重组 比如 0.2 0.3 0.1 0.4 四个数据的集合 
for (int i = 1; i < cdm.size() - 1; i++) {
cdm.set(i, cdm.get(i) + cdm.get(i - 1));
}


cdm.set(cdm.size() - 1, 1.0);
//重组后 变成0.2 0.5 0.6 1.0  四个数据的集合
 double randomNumber; 
 randomNumber = Math.random();
//随机生成一个0到1的随机数
//接下就很简单了你只要循环重组集合 如果随机数小于那个值 就是返回 I 就好了 
for(int i=0;i<cdm.size();i++){

if(randomNumber<cdm.get(i)){

return i;
}


}

 return -1; // 正常情况之下不应该到这一步的。因为cdf的最后一个概率应该是1

}

2:第二种方法

这个是网上找到的 原理也是一样 不过这里用法比较固定,但效率明显比第一个更高

public class MathRandom 
{ 
 /** 
   * 0出现的概率为%50 
   */ 
 public static double rate0 = 0.50; 
 /** 
   * 1出现的概率为%20 
   */ 
 public static double rate1 = 0.20; 
 /** 
   * 2出现的概率为%15 
   */ 
 public static double rate2 = 0.15; 
 /** 
   * 3出现的概率为%10 
   */ 
 public static double rate3 = 0.10; 
 /** 
   * 4出现的概率为%4 
   */ 
 public static double rate4 = 0.04; 
 /** 
   * 5出现的概率为%1 
   */ 
 public static double rate5 = 0.01; 
 
 /** 
 * Math.random()产生一个double型的随机数,判断一下 
 * 例如0出现的概率为%50,则介于0到0.50中间的返回0 
   * @return int 
   * 
   */ 
 private int PercentageRandom() 
 { 
 double randomNumber; 
 randomNumber = Math.random(); 
 if (randomNumber >= 0 && randomNumber <= rate0) 
 { 
  return 0; 
 } 
 else if (randomNumber >= rate0 && randomNumber <= rate0 + rate1) 
 { 
  return 1; 
 } 
 else if (randomNumber >= rate0 + rate1 
  && randomNumber <= rate0 + rate1 + rate2) 
 { 
  return 2; 
 } 
 else if (randomNumber >= rate0 + rate1 + rate2 
  && randomNumber <= rate0 + rate1 + rate2 + rate3) 
 { 
  return 3; 
 } 
 else if (randomNumber >= rate0 + rate1 + rate2 + rate3 
  && randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4) 
 { 
  return 4; 
 } 
 else if (randomNumber >= rate0 + rate1 + rate2 + rate3 + rate4 
  && randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4 
   + rate5) 
 { 
  return 5; 
 } 
 return -1; 
 } 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring全局懒加载的优劣及使用方法详解

    Spring全局懒加载的优劣及使用方法详解

    这篇文章主要介绍了Spring全局懒加载的优劣及使用方法详解,Spring 懒加载是一种延迟加载的机制,它允许在需要时才创建和初始化对象,而不是在应用程序启动时就立即加载所有对象,通过懒加载,可以提高应用程序的性能和资源利用率,需要的朋友可以参考下
    2023-10-10
  • Java求解两个非负整数最大公约数算法【循环法与递归法】

    Java求解两个非负整数最大公约数算法【循环法与递归法】

    这篇文章主要介绍了Java求解两个非负整数最大公约数算法,结合实例形式分析了java求解最大公约数的实现方法,并附带了循环法与递归法算法思路,需要的朋友可以参考下
    2018-03-03
  • Spring重试支持Spring Retry的方法

    Spring重试支持Spring Retry的方法

    本篇文章主要介绍了Spring重试支持Spring Retry的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • java验证码生成的基本流程

    java验证码生成的基本流程

    这篇文章主要介绍了java验证码生成的基本流程,需要的朋友可以参考下
    2015-11-11
  • Kafka常用命令之kafka-console-consumer.sh解读

    Kafka常用命令之kafka-console-consumer.sh解读

    这篇文章主要介绍了Kafka常用命令之kafka-console-consumer.sh解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • IDEA 2020.1.1好用的plugins插件推荐

    IDEA 2020.1.1好用的plugins插件推荐

    这篇文章主要介绍了IDEA 2020.1.1好用的plugins插件推荐,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • SpringBoot 2.6.x整合springfox 3.0报错问题及解决方案

    SpringBoot 2.6.x整合springfox 3.0报错问题及解决方案

    这篇文章主要介绍了SpringBoot 2.6.x整合springfox 3.0报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java中List根据map的某个key去重的代码

    Java中List根据map的某个key去重的代码

    今天小编就为大家分享一篇关于Java中List根据map的某个key去重的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java数组判断是否越界的示例代码

    Java数组判断是否越界的示例代码

    在Java编程中,避免数组越界是十分重要的,本文介绍了两种常见的判断数组是否越界的方法:一是通过数组的length属性来判断索引是否合法;二是通过捕获ArrayIndexOutOfBoundsException异常来处理越界问题,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • SpringDataJPA原生sql查询方式的封装操作

    SpringDataJPA原生sql查询方式的封装操作

    这篇文章主要介绍了SpringDataJPA原生sql查询方式的封装操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论