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

