JAVA 生成隨機數(shù)并根據(jù)后臺概率靈活生成的實例代碼
最近碰到一個大轉(zhuǎn)盤的業(yè)務(wù),獎品可根據(jù)數(shù)據(jù)后臺靈活設(shè)置中獎概率,看起來挺簡單的業(yè)務(wù)功能,但實現(xiàn)起來對我這個毫無經(jīng)驗的人來說并不容易,后面又碰到一個根據(jù)后臺概率隨機獲取不同概率的檔位積分,前面是兩個實際中業(yè)務(wù)要用到的話不多說吧,直接上我寫概率工具類吧。
1:第一種方法
/**
* 根據(jù)概率 獲取隨機積分
*
* @param rdm
* @return
*/
//這里的參數(shù)是一個存儲概率集合當(dāng)然你也可以用數(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; // 正常情況之下不應(yīng)該到這一步的。因為cdf的最后一個概率應(yīng)該是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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JAVA 根據(jù)設(shè)置的概率生成隨機數(shù)的方法
- 如何用java生成指定范圍的隨機數(shù)
- java生成隨機字符串的兩種方法
- java實現(xiàn)隨機生成UUID
- Java 隨機生成驗證碼(支持大小寫字母、數(shù)字、隨機字體)的實例
- java生成字母數(shù)字組合的隨機數(shù)示例 java生成隨機數(shù)
- Java生成含字母和數(shù)字的6位隨機字符串
- java隨機抽取指定范圍內(nèi)不重復(fù)的n個數(shù)
- java隨機抽取指定范圍不重復(fù)的數(shù)字
- Java 隨機取字符串的工具類
- java實現(xiàn)的根據(jù)概率隨機中獎測試類
相關(guān)文章
解析WeakHashMap與HashMap的區(qū)別詳解
本篇文章是對WeakHashMap與HashMap的區(qū)別進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Windows 10上JDK環(huán)境安裝配置圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows 10上JDK環(huán)境安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03
IntelliJ IDEA中查看文件內(nèi)所有已聲明的方法(類似eclipse的outline)
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA中查看文件內(nèi)所有已聲明的方法(類似eclipse的outline),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10
SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例
Spring Boot提供的默認(rèn)異常處理機制通常并不一定適合我們實際的業(yè)務(wù)場景,因此,我們通常會根據(jù)自身的需要對Spring Boot全局異常進行統(tǒng)一定制,例如定制錯誤頁面,定制錯誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯誤頁面的實現(xiàn),快來學(xué)習(xí)吧2021-12-12

