/**
* 通过奖品列表中的概率抽取奖品
*
* @param list
* @return
*/
private GiftPackageRule getPrize(List<GiftPackageRule> list) {
if (list == null || list.size() < 1) return null;

// 先计算所有中奖率的总和
double total = 0.0;
for (GiftPackageRule dpr : list) {
total += dpr.getProbability();
}

//如果概率小于100的话,增加一个不中奖的概率,去掉这行代码就是100%中奖
if (total < 100) {
GiftPackageRule giftPackageRule = new GiftPackageRule();
giftPackageRule.setProbability((int) (100 - total));
list.add(giftPackageRule);
}

// 获取一个代表中奖的随机值
double bingo = Math.random() * total;

// 判断这个中奖值落在哪个奖品上
for (GiftPackageRule dpr : list) {
if (bingo < dpr.getProbability()) {
if (dpr.getGiftPackId() == null) {
return null;
} else {
return dpr;
}
} else {
bingo -= dpr.getProbability();
}
}
return null;
}

相关文章:

  • 2021-06-17
  • 2022-01-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
猜你喜欢
  • 2021-07-26
  • 2021-06-22
  • 2021-09-14
  • 2022-02-21
  • 2022-12-23
相关资源
相似解决方案