/** * 通过奖品列表中的概率抽取奖品 * * @param list * @return */ private GiftPackageRule getPrize(Listlist) { 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; }