JAVA 生成隨機數(shù)并根據(jù)后臺概率靈活生成的實例代碼
最近碰到一個大轉(zhuǎn)盤的業(yè)務,獎品可根據(jù)數(shù)據(jù)后臺靈活設(shè)置中獎概率,看起來挺簡單的業(yè)務功能,但實現(xiàn)起來對我這個毫無經(jīng)驗的人來說并不容易,后面又碰到一個根據(jù)后臺概率隨機獲取不同概率的檔位積分,前面是兩個實際中業(yè)務要用到的話不多說吧,直接上我寫概率工具類吧。
1:第一種方法
/**
* 根據(jù)概率 獲取隨機積分
*
* @param rdm
* @return
*/
//這里的參數(shù)是一個存儲概率集合當然你也可以用數(shù)組
public static Integer randomPoints(ArrayList<Double> rdm) {
ArrayList<Double> cdm = rdm;
//這里是將概率集合重組 比如 0.2 0.3 0.1 0.4 四個數(shù)據(jù)的集合
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 四個數(shù)據(jù)的集合
double randomNumber;
randomNumber = Math.random();
//隨機生成一個0到1的隨機數(shù)
//接下就很簡單了你只要循環(huán)重組集合 如果隨機數(shù)小于那個值 就是返回 I 就好了
for(int i=0;i<cdm.size();i++){
if(randomNumber<cdm.get(i)){
return i;
}
}
return -1; // 正常情況之下不應該到這一步的。因為cdf的最后一個概率應該是1
}
2:第二種方法
這個是網(wǎng)上找到的 原理也是一樣 不過這里用法比較固定,但效率明顯比第一個更高
public class MathRandom
{
/**
* 0出現(xiàn)的概率為%50
*/
public static double rate0 = 0.50;
/**
* 1出現(xiàn)的概率為%20
*/
public static double rate1 = 0.20;
/**
* 2出現(xiàn)的概率為%15
*/
public static double rate2 = 0.15;
/**
* 3出現(xiàn)的概率為%10
*/
public static double rate3 = 0.10;
/**
* 4出現(xiàn)的概率為%4
*/
public static double rate4 = 0.04;
/**
* 5出現(xiàn)的概率為%1
*/
public static double rate5 = 0.01;
/**
* Math.random()產(chǎn)生一個double型的隨機數(shù),判斷一下
* 例如0出現(xiàn)的概率為%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;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java求解兩個非負整數(shù)最大公約數(shù)算法【循環(huán)法與遞歸法】
這篇文章主要介紹了Java求解兩個非負整數(shù)最大公約數(shù)算法,結(jié)合實例形式分析了java求解最大公約數(shù)的實現(xiàn)方法,并附帶了循環(huán)法與遞歸法算法思路,需要的朋友可以參考下2018-03-03
Kafka常用命令之kafka-console-consumer.sh解讀
這篇文章主要介紹了Kafka常用命令之kafka-console-consumer.sh解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
SpringBoot 2.6.x整合springfox 3.0報錯問題及解決方案
這篇文章主要介紹了SpringBoot 2.6.x整合springfox 3.0報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

