JAVA大轉盤抽獎演算法
阿新 • • 發佈:2019-01-26
獎品的概率根據權重計算(當前權重/總權重)
程式碼如下
int totalWeight = 1000;//計算出來的總權重
int random = (int)(Math.random() * totalWeight + 1);//隨機數
int stepTotal = 0;
Collections.sort(probaList);//升序
//probability ->key 是獎品id ->prod是獎品權重 for(Probability probability : probaList) { int proba = probability.prob; int step = stepTotal + proba; //將隨機數放進不同的桶 if(random>stepTotal && random<=step) { return probability.key; } stepTotal += step; } return 0;
根據總權重分出來不同的桶,比如獎品列表裡有3個獎品,權重分別為 20 30 50,那麼就可以分為3個桶。
第一個桶:【1-20】
第二個桶:【21-50】
第三個桶:【51-100】
從1-100裡隨機出來一個數,根據這個數字進入不同的桶來判斷中的是什麼獎品。
概率解釋:
以第一個桶為例,從100個數裡隨機出來1個數,這個數在1-20之間的概率就是20%