简单发红包

自我检讨:

                         既然决定要踏上这条不归路(。。。),就要坚持下去,这两天没有写博客是自己懒惰了!虽然每天不一定都有关于代码的,但是可以写一写自己的感受、学后感。。BALABALABALA,,希望以后越来越好。

发红包分为(金额为Double类型)

                普通红包:一笔金额平均分成n等份

                手气红包:金额随机发放

发普通红包

定义一个Double类型变量Money来接受金额,然后将发放金额转换成分,避免进度损失;定义int类型变量count代表分成几份。先将Money与count 做除法运算来获得每一份的金额;再做取余运算,看是否有余数,如果有,之后将其添加到其中一份金额中。如果再用等分定义一个集合,循环存放n-1等份金额,将最后一份金额加上余数(如果有余数的话)。

public static void sendMoney(Double money, int count){
        ArrayList<Double> moneyList = new ArrayList<>();
        money = money * 100;//转化为分
        int  avgMoney = (int)(money / count);//转化为int类型去除小数
        Double overMoney = money % count;

        for (int i = 0; i < count - 1; i++) {
            moneyList.add(avgMoney / 100.0);
        }

        if (overMoney == 0){
            moneyList.add(avgMoney / 100.0);
        }else {
            moneyList.add((avgMoney + overMoney) / 100.);//将余数加在最后一份上
        }
    }

发手气红包

手气红包主要是在金额要怎样随机,不能一下分出特别大的金额,不让回会出现分到0元的可能,所以要规定每一份金额的取值范围取。

找到的一份规定。。。。

                                                                 当前剩余平均金额 = 剩余总金额 / 剩余红包个数

                        每一份随机金额范围(除最后一份),最小值为1,最大值为当前剩余平均金额的2倍 ,单位为"分"

随着金额的减少,每一次金额的随机取值范围都在变化。

扫描二维码关注公众号,回复: 2674143 查看本文章
public static void sendMoney(Double money, int count){
        Random rd = new Random();
        ArrayList<Double> moneyList = new ArrayList<>();
        money = money * 100;

        int n = count - 1;//分几份

        for (int i = 0; i < n; i++) {
            //随机的数作为一份金额
            int m = rd.nextInt((int)(money / count * 2))+1;
               
            moneyList.add(m / 100.0);
            //总金额 - 随机金额 = 下一轮要分的总额
            money -= m;
            //每一轮后分的份数-1
            count--;
        }
        moneyList.add(money / 100.0);
        System.out.println(moneyList);
    }

PS:网上还有很多取发红包的例子,但是目前还无法掌握,等过段时间再来补充补充~

猜你喜欢

转载自blog.csdn.net/qq_33417486/article/details/81254751