用户抽奖的大致思路就是,当用户点击抽奖后,后台随机算出100以内的一个随机数,然后查看该随机数是否在中奖概率范围内。
抽奖概率写死的方法:/**
* 抽奖概率
*
* @return rand
*/
public static int randomInt() {
int randomNum = new Random().nextInt(100) + 1;
if (randomNum == 1) {
return 1;
} else if (randomNum >= 2 && randomNum <= 5) {
return 2;
} else if (randomNum >= 6 && randomNum <= 10) {
return 3;
} else if (randomNum >= 11 && randomNum <= 50) {
return 4;
} else {
return 5;
}
}
从数据库读取概率配置(本次抽奖分五等奖)public static int randomInt(LotteryPrizeEntry lotteryPrize) {
//概率不能为空,至少为0
if (lotteryPrize.getFirstPrize() + lotteryPrize.getSecondPrize()
+ lotteryPrize.getThirdPrize() + lotteryPrize.getFourthPrize() + lotteryPrize.getFifthPrize() > 100) {
return 0;
}
int randomNum = new Random().nextInt(100) + 1;
List list = new ArrayList();
list.add(lotteryPrize.getFirstPrize());
list.add(lotteryPrize.getSecondPrize());
list.add(lotteryPrize.getThirdPrize());
list.add(lotteryPrize.getFourthPrize());
list.add(lotteryPrize.getFifthPrize());
int prize = 1; //奖品级数
int num = 0; //存中奖概率数
int num2 = 1;//存中奖概率数
for (Integer i : list) {
num = +i;
if (i >= 1) {
if (randomNum >= num2 && randomNum <= num) {
return prize;
}
}
prize++; //奖级加一
num2 = +i;
}
return prize;中奖概率配置表:
BEGIN_TIME DATE 开始时间
END_TIME DATE 结束时间
LOTTERY_ISENABLE NUMBER 是否开启 0关闭1开启
FIRST_PRIZE NUMBER 一等奖概率
SECOND_PRIZE NUMBER 二等奖概率
THIRD_PRIZE NUMBER 三等奖概率
FOURTH_PRIZE NUMBER 四等奖概率
FIFTH_PRIZE NUMBER 五等奖概率