两类,第一类是常见的有等级的抽奖活动,如一等、二等、三等奖等等,废话不多说,直接贴代码:
// 分别为一、二、三、四等将的奖品数量,最后一个为未中奖的数量。
private static final Integer[] lotteryList = {5, 10, 20, 40, 100};
private int getSum() {
int sum = 0;
for (int v : lotteryList) {
sum += v;
}
return sum;
}
private int getLotteryLevel() {
Random random = new Random(System.nanoTime());
int sum = getSum();
for (int i = 0; i < lotteryList.length; ++i) {
int randNum = Math.abs(random.nextInt()) % sum;
if (randNum <= lotteryList[i]) {
return i;
} else {
sum -= lotteryList[i];
}
}
return -1;
}
另一类是不分等级的抽奖活动,仅需要参与人数与奖品总数,各奖品中奖概率相等。代码如下:
//另一种抽奖算法&#