黑马程序员技术交流社区

标题: 关于用Java实现微信群发红包的逻辑 [打印本页]

作者: 来到精彩世界    时间: 2016-11-24 00:06
标题: 关于用Java实现微信群发红包的逻辑
<import java.util.Scanner;
import java.util.Random;
public class HongBao {
        public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);
                Random rd=new Random();
                System.out.println("请输入您要发的总金额...");
                double mon=sc.nextDouble();
                System.out.println();
                System.out.println("请输入您要发的红包的数量...");
                int num=sc.nextInt();
                //System.out.println("Hello World!");
                /*int[][] arr=new int[4][4];
                arr[1][3]=3;s
                System.out.println(arr[1][3]);*/
                System.out.println();
                int money=(int)(mon*100);    //将金额转化为 分
                int a=0;  //记录已产生红包的总金额
                double res=0.0; //存储当前红包的金额数;
                for(int i=1;i<=num;i++) {     //随机产生num个红包
                        if(i==num) {
                            res=(double)(money-a)/100;
                        }else {
                    int b=rd.nextInt(money-a-num+i)+1;  //随机产生一个金额,金额的最大值为 总金额数-已发金额数
                        a+=b;
                        res=(double)b/100;}
                        System.out.println();
                        System.out.println("第"+i+"个红包的金额是:\t"+res);
                }

        }
}
>
我的大致思路是:
1.接收用户输入的红包总金额和要发的红包的个数,并将红包总金额扩大100倍,
2.在(总金额-剩余红包数)(为了保证每个红包至少有1分钱)的范围内产生一个随机数,将这个随机数的缩小100倍,作为第一个红包的金额。
3.在(总金额-已产生红包总金额-剩余红包数)的范围内产生一个随机数,将这个随机数的缩小100倍,作为第二个红包的金额。
4.重复3的操作,直至产生倒数第二个红包
5.用总金额-已产生红包总金额作为最后一个红包的金额

但是这样做有一个非常严重的问题,第一个红包的金额往往是最大的,最后一个红包的金额往往是最小的
不知道应该怎样改才比较完美,还请大神不吝赐教。
作者: mjchzhl    时间: 2016-11-24 07:26
厉害,学习学习

作者: peng84    时间: 2016-11-24 13:12
把红包分好了,放到list集合里,打乱再发不就行了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2