奖品的概率根据权重计算(当前权重/总权重)
代码如下
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】
<