/** * 經過獎品列表中的機率抽取獎品 * * @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;}