您好,登錄后才能下訂單哦!
最近碰到一個大轉盤的業務,獎品可根據數據后臺靈活設置中獎概率,看起來挺簡單的業務功能,但實現起來對我這個毫無經驗的人來說并不容易,后面又碰到一個根據后臺概率隨機獲取不同概率的檔位積分,前面是兩個實際中業務要用到的話不多說吧,直接上我寫概率工具類吧。
1:第一種方法
/** * 根據概率 獲取隨機積分 * * @param rdm * @return */ //這里的參數是一個存儲概率集合當然你也可以用數組 public static Integer randomPoints(ArrayList<Double> rdm) { ArrayList<Double> cdm = rdm; //這里是將概率集合重組 比如 0.2 0.3 0.1 0.4 四個數據的集合 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 四個數據的集合 double randomNumber; randomNumber = Math.random(); //隨機生成一個0到1的隨機數 //接下就很簡單了你只要循環重組集合 如果隨機數小于那個值 就是返回 I 就好了 for(int i=0;i<cdm.size();i++){ if(randomNumber<cdm.get(i)){ return i; } } return -1; // 正常情況之下不應該到這一步的。因為cdf的最后一個概率應該是1 }
2:第二種方法
這個是網上找到的 原理也是一樣 不過這里用法比較固定,但效率明顯比第一個更高
public class MathRandom { /** * 0出現的概率為%50 */ public static double rate0 = 0.50; /** * 1出現的概率為%20 */ public static double rate1 = 0.20; /** * 2出現的概率為%15 */ public static double rate2 = 0.15; /** * 3出現的概率為%10 */ public static double rate3 = 0.10; /** * 4出現的概率為%4 */ public static double rate4 = 0.04; /** * 5出現的概率為%1 */ public static double rate5 = 0.01; /** * Math.random()產生一個double型的隨機數,判斷一下 * 例如0出現的概率為%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; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。