/** * 经过奖品列表中的几率抽取奖品 * * @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;}