JAVA 生成隨機(jī)數(shù)并根據(jù)后臺概率靈活生成的實例代碼
最近碰到一個大轉(zhuǎn)盤的業(yè)務(wù),獎品可根據(jù)數(shù)據(jù)后臺靈活設(shè)置中獎概率,看起來挺簡單的業(yè)務(wù)功能,但實現(xiàn)起來對我這個毫無經(jīng)驗的人來說并不容易,后面又碰到一個根據(jù)后臺概率隨機(jī)獲取不同概率的檔位積分,前面是兩個實際中業(yè)務(wù)要用到的話不多說吧,直接上我寫概率工具類吧。
1:第一種方法
/** * 根據(jù)概率 獲取隨機(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(); //隨機(jī)生成一個0到1的隨機(jī)數(shù) //接下就很簡單了你只要循環(huán)重組集合 如果隨機(jī)數(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型的隨機(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實現(xiàn)隨機(jī)生成UUID
- Java 隨機(jī)生成驗證碼(支持大小寫字母、數(shù)字、隨機(jī)字體)的實例
- java生成字母數(shù)字組合的隨機(jī)數(shù)示例 java生成隨機(jī)數(shù)
- Java生成含字母和數(shù)字的6位隨機(jī)字符串
- java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個數(shù)
- java隨機(jī)抽取指定范圍不重復(fù)的數(shù)字
- Java 隨機(jī)取字符串的工具類
- java實現(xiàn)的根據(jù)概率隨機(jī)中獎測試類
相關(guān)文章
Java求解兩個非負(fù)整數(shù)最大公約數(shù)算法【循環(huán)法與遞歸法】
這篇文章主要介紹了Java求解兩個非負(fù)整數(shù)最大公約數(shù)算法,結(jié)合實例形式分析了java求解最大公約數(shù)的實現(xiàn)方法,并附帶了循環(huán)法與遞歸法算法思路,需要的朋友可以參考下2018-03-03Kafka常用命令之kafka-console-consumer.sh解讀
這篇文章主要介紹了Kafka常用命令之kafka-console-consumer.sh解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03SpringBoot 2.6.x整合springfox 3.0報錯問題及解決方案
這篇文章主要介紹了SpringBoot 2.6.x整合springfox 3.0報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01