JAVA 生成隨機(jī)數(shù)并根據(jù)后臺(tái)概率靈活生成的實(shí)例代碼
最近碰到一個(gè)大轉(zhuǎn)盤的業(yè)務(wù),獎(jiǎng)品可根據(jù)數(shù)據(jù)后臺(tái)靈活設(shè)置中獎(jiǎng)概率,看起來挺簡(jiǎn)單的業(yè)務(wù)功能,但實(shí)現(xiàn)起來對(duì)我這個(gè)毫無經(jīng)驗(yàn)的人來說并不容易,后面又碰到一個(gè)根據(jù)后臺(tái)概率隨機(jī)獲取不同概率的檔位積分,前面是兩個(gè)實(shí)際中業(yè)務(wù)要用到的話不多說吧,直接上我寫概率工具類吧。
1:第一種方法
/** * 根據(jù)概率 獲取隨機(jī)積分 * * @param rdm * @return */ //這里的參數(shù)是一個(gè)存儲(chǔ)概率集合當(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ù) //接下就很簡(jiǎn)單了你只要循環(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; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(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)測(cè)試類
相關(guān)文章
Java求解兩個(gè)非負(fù)整數(shù)最大公約數(shù)算法【循環(huán)法與遞歸法】
這篇文章主要介紹了Java求解兩個(gè)非負(fù)整數(shù)最大公約數(shù)算法,結(jié)合實(shí)例形式分析了java求解最大公約數(shù)的實(shí)現(xiàn)方法,并附帶了循環(huán)法與遞歸法算法思路,需要的朋友可以參考下2018-03-03Kafka常用命令之kafka-console-consumer.sh解讀
這篇文章主要介紹了Kafka常用命令之kafka-console-consumer.sh解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03SpringBoot 2.6.x整合springfox 3.0報(bào)錯(cuò)問題及解決方案
這篇文章主要介紹了SpringBoot 2.6.x整合springfox 3.0報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Java中List根據(jù)map的某個(gè)key去重的代碼
今天小編就為大家分享一篇關(guān)于Java中List根據(jù)map的某個(gè)key去重的代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12