gaoyibing的gravatar头像
gaoyibing 2016-07-07 09:55:59

java简单的抽奖方法——配置概率(100以内随机数的一个解决方案)

用户抽奖的大致思路就是,当用户点击抽奖后,后台随机算出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<Integer> list = new ArrayList<Integer>();
		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                 五等奖概率


打赏

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友