随机分配法
随机法,每次抢红包时计算出本次能够获得的最小金额和最大金额,然后在这个区域间中取一个随机值并计算得出这次抢到的红包金额,这种方法,优点是实现简单,但是,先抢的人会很赚,抢到大红包的概率很高,越到后面的人越吃亏。
public class RedEnvelopMain {
// 最佳手气获得红包金额,最大金额/总金额,的占比
public static final double BEST_LUCK_PERCENT = 0.9;
// 单人每次最小抢到的金额,默认为1分钱
public static final double ONE_PERSON_MIN_DRAW_AMOUNT = 1;
/**
* 拆红包方法
* 红包金额分配算法
*
* @param totalAmount 红包总金额
* @param personNum 抢红包总人数
*/
public void redEnvelopLuckyDraw(double totalAmount, int personNum) {
if (totalAmount <= 0 || personNum < 1) {
System.out.println("输入参数非法,请检查");
return;
}
// 红包总金额 >= 分配人数 * 每人最小中奖金额
if (totalAmount < (ONE_PERSON_MIN_DRAW_AMOUNT * personNum)) {
System.out.println("红包总金额不能小于(中奖人数*单人单次中奖金额),请核对红包金额和发放人数");
return;
}
double minDrawAmount = ONE_PERSON_MIN_DRAW_AMOUNT;
double maxDrawAmount = totalAmount * BEST_LUCK_PERCENT;
double drawLuckAmount = 0;
for (Integer i = 0; i < personNum; i++) {
int remainPer