- 拼手气红包算法网上存在很多,效率一般也都很快,但是主管提出的需求中,要求拼手气可以设置最大值最小值。。。
- 于是便出现了如下代码:
/**
* 手写拼手机红包金额生成(单位:分)
* @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;
}
本人菜鸡一枚,如有好的建议,欢迎留言,感谢