记录一下,遇到一个需求,要求把总数(正整数)分成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; } }