您的位置:首页 > 编程语言 > Java开发

java生成红包的简单算法

2017-09-21 14:31 232 查看
Random random = new Random();
//总金额
int total = 10000;//所有金额都是以分为单位的(金融界)
//红包数量
int num = 20;
//最小红包
int min = 100;
List<Integer> list = new ArrayList<Integer>();
int totalTmp = 0;
for(int i = 0;i<num;i++){
int hongbao = 0;
//预留红包(不然第一个红包很多,第二个也很大,后面的红包没钱了)
Integer pre = min*(num-i-1);
/*除以5 是为了随便生成的数太大,而导致红包分配不均匀()
这个数字越大,导致最后一个红包很大,其他的很小
*/
hongbao = random.nextInt((total-pre-totalTmp)/5);
hongbao = hongbao < min ? min : hongbao;
if(i==num-1) {
hongbao = total - totalTmp;
}
totalTmp += hongbao;
list.add(hongbao);
}
System.out.println(list);
Collections.shuffle(list);//重新洗牌打乱
System.out.println(list);
//校验生成的红包总金额是否一致
int amount = 0;
for (Integer a:list) {
amount += a;
}
System.out.println("num"+list.size());
System.out.println(amount + " "+ total +" "+totalTmp);
//生成的红包以队列的形式存入redis,抢红包时性能更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: