需求
网站现有一抽奖功能,已经定义好奖品,每个奖品都有对应的中奖概率。通过奖品概率随机进行抽奖
实现思路
- 每个奖品都有对应的中奖概率,先对所有奖品中奖概率求和
- 计算出每个奖品在0-1之间所占的区间块
- 随机产生0-1之间的随机数,随机数落在哪个区间,就是中奖哪个
例如现有以下奖品:
奖品A 中奖概率为 0.1
奖品B 中奖概率为 0.01
奖品C 中奖概率为 0.001
奖品D 中奖概率为 0.8
第一步:求出概率总和 0.1+0.01+0.001+0.8 = 0.911
第二步:计算每个奖品的所占区间块
奖品A: 0.1 / 0.911 = 0.1098
奖品B: (0.1+0.01)/ 0.911 = 0.1207
奖品C:(0.1+0.11+0.001)/ 0.911 = 0.1218
奖品D:(0.1+0.11+0.001+0.8)/ 0.911 = 1
则:
奖品A的所占区间为:0~0.1098
奖品B的所占区间为:0.1098~0.1207
奖品C的所占区间为:0.1207~0.1218
奖品D的所占区间为:0.1218~1
代码如下
/**
* 奖品实体类
*/
public class Award{
public Award(){}
public Award(String awardTitle,double probability){
this.awardTitle = awardTitle;
this.probability = probability;
}