最近项目开发中遇到一个随机红包需求,与微信红包不同的是,我们项目需要设置随机上下限范围,避免每位用户分配到的红包差距过大,从而导致大多用户的抱怨。

一、需求分析与实现-带上下限对称随机红包算法

  网上有很多关于微信红包的实现算法,笔者也特意请教了一位曾经参与红包算法的大牛,最早期的微信红包算法完全是按照同一随机种子来随机分配红包,这是完完全全的随机算法。PS:计算机的所有随机都是依赖随机种子,相同的随机种子随机结果具有可再现性。

/**
 * 获取指定随机种子的前n个随机结果
 * 此时只要随机种子seed固定,则返回列表的前n个随机结果也是固定的,每份红包可以按随机比例分配
 * @param n
 * @param seed
 * @return
 */
private static List<Float> getRandomList(int n, long seed) {
    Random random  = new Random(seed);
    List<Float> randomList = new ArrayList<>();
    for (int i = 0; i < n; i++) {
        randomList.add(random.nextFloat());
    }
    return randomList;
} 
View Code

相关文章: