代码
private List<Integer> splitRedPacket(int total, int count, int min, int max) {
List<Integer> list = new LinkedList<>();
Random random = new Random();
int lastTotal = total - count * min;
if (lastTotal == 0) {
for (int i = 0; i < count; i++) {
list.add(min);
}
return list;
}
boolean avgRandom = lastTotal / count > 0;
for (int i = count; i > 1; i--) {
int value = avgRandom ? random.nextInt(lastTotal / i * 2) : random.nextInt(lastTotal);
value = Math.max(value, 0);
value = Math.min(value, max - min);
lastTotal -= value;
list.add(value + min);
}
if (lastTotal + min > max) {
return this.splitRedPacket(total, count, min, max);
}
list.add(lastTotal + min);
Collections.shuffle(list);
return list;
}
注意点
- 随机金额时,需要注意入参total传入时将分转为整数,total = total * 100