前言
活动形式:参与活动人员通过红包雨活动抢积分,通过积分可进行相应的奖品兑换
活动当天,我负责完成的功能包括:发红包,红包雨,排行榜
我的考虑
实现逻辑
一、发红包(拆分)
我们采取的是可控情况的不等额金额分配,这种情况下参数共需4个:总金额,红包个数,最大值,最小值,具体拆分形式
多种多样,这里举个栗子(可限定最大值,最小值):
// 每一份随机金额范围(除最后一份),最小值为1,最大值为当前剩余平均金额的3倍
// 当前剩余平均金额=剩余总金额/剩余红包
public ArrayList<Integer> divide(int totalMoney, int count) {
//创建保存各个红包金额的集合
ArrayList<Integer> list = new ArrayList <>();
//定义循环次数,总个数‐1次
int time = count‐1;
//创建随机数对象
Random random = new Random();
//循环分配
for (int i = 0; i < time; i++) {
/*
*每次重新计算,生成随机金额
*随机范围:totalMoney/count*3,totalMoney不断的减少,
*count也不断的减少,所以这是一个可变化的范围.
*/
int money = random.nextInt(totalMoney / count * 3) + 1;
//金额添加到集合
list.add(money);
//总金额扣除已分配金额
total Money‐=money;
//红包个数‐1
count‐‐;
}
//剩余的金额,为最后一个红包
list.add(totalMoney);
return list;
}
二、抢红包(含关键逻辑的代码)
(一)逻辑
抢红包的关键点:抢、存
抢:
- 什么时候抢
- 有红包活动
- 当前时间晚于红包开抢时间
- 抢什么
- 积分
- 语录
部分代码
private static AtomicInteger count = new AtomicInteger(0);