简易实现支持设置最大值最小值的拼手气红包方法

  • 拼手气红包算法网上存在很多,效率一般也都很快,但是主管提出的需求中,要求拼手气可以设置最大值最小值。。。
  • 于是便出现了如下代码:
/**
     * 手写拼手机红包金额生成(单位:分)
     * @param amount  总金额
     * @param person  总人数
     * @param max  最大金额
     * @param min  最小金额
     * @return
     */
    private List<Integer> randomHandOutAlgorithm(int amount,int person,int max,int min){
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        int num = person;
        for (int i=0;i<num-1;i++){
            //生成随机数
            int temp = random.nextInt(max - min) + min;
            person--;
            //如果随机数使得后续数据不符合条件,则取均值
            if (amount-temp<=0 ||(amount-temp)/person >max ||(amount-temp)/person <min){
                temp = amount/(person+1);
            }
            list.add(temp);
            amount-=temp;
        }
        list.add(amount);
        //随机顺序,可不加
        Collections.shuffle(list);
        return list;
    }

本人菜鸡一枚,如有好的建议,欢迎留言,感谢

原文地址:https://www.cnblogs.com/fqliu/p/14653569.html