java正整数分成n份且每一份数值随机分配


记录一下,遇到一个需求,要求把总数(正整数)分成n份,每一份随机分配.

public class NumberRandomSplitUtil {


    /**
     * 把一个正整数随机拆分成count个正整数
     *
     * @param totalNum
     * @param count
     * @return
     */
    public static List<Integer> random(int totalNum, int count) {
        // 创建一个长度的红包数组
        List<Integer> redList = new ArrayList<>();

        int totalMoney = (totalNum);

        /*if (totalMoney < count || totalMoney < 1) {
            return redList; // 返回空的集合
        }*/

        //2. 进行随机分配
        Random rand = new Random();

        int leftMoney = totalMoney;  // 剩余金额
        int leftCount = count;  // 剩余份数
        // 随机分配公式:1 + rand.nextInt(leftMoney / leftCount * 2);
        for (int i = 0; i < count - 1; i++) {
            int money_ = 0;
            if (leftMoney > 0) {
                if ((leftMoney / leftCount * 2) < 1) {
                    money_ = leftMoney;
                } else {
                    money_ = 1 + rand.nextInt(leftMoney / leftCount * 2);
                }

            } else {
                money_ = 0;
            }
            redList.add(money_);
            if (money_ > 0) {
                leftMoney -= money_;
                leftCount--;
            }

        }
        // 把剩余的最后一个放到最后一个包里
        redList.add(leftMoney);
        return redList;
    }
}

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM