首页 > 其他分享 >过年发红包的思考

过年发红包的思考

时间:2023-06-12 16:36:56浏览次数:32  
标签:过年 BigDecimal sum peo 发红包 思考 bigDecimal yuan numList



文章目录

  • 前言
  • 一、思路
  • 二、代码实现
  • 总结



前言

不出正月都是年,给大家拜个年! 新年好~
过年在群里发红包,然后大家抢红包,红包有大有小,但是刚刚好会被抢完,想着自己实现下吧~~


有感而发~
春节像是做了一场热闹的梦,
车站道别的话语言不由衷,
离别时的行囊总比回家的重,
珍重珍重下次梦中再相逢。

一、思路

我的想法是利用随机数,然后按照人头分配,只要分配合理,那么此次分配就是合理的,否则重新分配;我这里面的合理就是,红包分配的总金额应该与原本的总金额一致。如何保证呢?
比如 我要分成5份,那么我就先分配4份,如果不超过总金额,那么剩余的钱都分给最后一个人;否则重新分配;

二、代码实现

代码如下(示例):

public class Suijihongbao {


    public static void main(String[] args) {

        int peo = 5;//人数
        int yuan = 10;//金额

        List<BigDecimal> numList = CollectionUtil.newArrayList();
        BigDecimal sum = random(peo, yuan, numList);
        BigDecimal bigDecimal = new BigDecimal(yuan);
        while (sum.compareTo(bigDecimal) > 0) {// 大于总数,重新分配
            numList.clear();
            sum = random(peo, yuan, numList);
        }
        numList.add(bigDecimal.subtract(sum));
        System.out.println("分发结果: =============");
        for (BigDecimal decimal : numList) {
            System.out.println(decimal);
        }
    }

    private static BigDecimal random(int peo, int yuan, List<BigDecimal> numList) {
        BigDecimal sum = new BigDecimal(0.00);
        for (int i = 0; i < peo - 1; i++) {
            BigDecimal bigDecimal = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(yuan)).setScale(2, RoundingMode.UP);
            numList.add(bigDecimal);
        }
        sum = numList.stream().reduce(BigDecimal.ZERO,BigDecimal::add);
        System.out.println("完成了一次分发");
        return sum;
    }
}

过年发红包的思考_System


过年发红包的思考_java_02


总结

利用bigDecimal 的特性可以保证小数加减的正确性,然后按照上述的"合理" 思路进行分配,不停循环,直到"合理" 为止;
这种写法不太合理,看运气,有时候一次就ok了,但是有时候就会循环很多次; 我知道肯定有更好更合理的实现方式,仅供阅读吧,菜鸡互啄,哈哈哈


标签:过年,BigDecimal,sum,peo,发红包,思考,bigDecimal,yuan,numList
From: https://blog.51cto.com/u_16158506/6463432

相关文章

  • 中台战略-企业数字化转型的思考
    学习目录一、什么是数字化转型?二、为什么要做数字化转型?三、什么是中台战略?四、企业如何实施中台战略?五、实施中台战略要注意哪些坑                                            ......
  • 从腾讯“办公三杰”打通,思考如何做产品功能整合
    编辑导语:近日,企业微信、腾讯文档、腾讯会议三大产品实现了打通。而此次功能整合的背后,是用户重叠、用户需求等因素在推动。具体该如何看待此次三大产品之间的功能整合?产品之间若想实现功能整合,又该满足什么条件呢?就在几天前的企业微信2022新品发布会上,企业微信联合腾讯文档、腾讯会......
  • 思考-评估人际关系
    文章摘要对现有人际关系进行梳理,目的是减轻人际关系的负担。主要人物及关系评价张RX刚来就认识她,人还可以,有请我吃饭,当时自己没有太多的钱,不过后来或多或少有送礼,也算是两清了吧。没多久她就恋爱了,我也没啥心思去实验室,有点羡慕和难受,想着在寝室学李浩燊苦苦修炼。中间......
  • 由问题“如何将进程A的标准输出重定向为进程B的标准输入"引发的思考
    由问题“如何将进程A的标准输出重定向为进程B的标准输入"引发的思考若两个进程都是通过bash的同一条命令来启动,可以简单得使用bash的管道来完成。但当进程B是已经在运行状态的程序(如服务器程序),该怎么实现这个功能呢?为简化讨论,进程A取cat/echo等带输出的待启动程序,进程B对应的程......
  • 思考-为什么不想做事还特别累
    问题描述每天起来特别的累,以至于做事情的动力和欲望降到很多,直到最后不想做任何事情,这是为什么?原因分析1.心力、脑力、体力的耗尽,不是不想,而是特别累的不想做事2.想各种其他的东西,耗费所剩无几的脑力3.不知道做哪一件事情,产生矛盾的内耗......
  • 30岁,还像小时候一样,盼过年,幼稚么?
    30岁,还像小时候一样,盼过年,幼稚么?星云_fighting关注IP属地:江西22023.01.1306:09:57字数1,303阅读246光阴似箭,岁月如梭,往事如风,一个不留神,就匆匆忙忙跨过了三十岁的门槛,昔日的少年已多了几分沧桑,昔日的温馨家庭,也在斗转星移里,变得愈发冷清起来,冷的几近压抑,穷的几近麻......
  • 关于大型客户端项目的思考
    大型客户端项目在使用过程中一般会面临几个问题:a.启动慢b.运行慢c.稳定性低基于以上问题进行一些思考,最终总结出该方案.解决方案当项目过大时,需要加载的程序集也越多,对应程序需要启动的时间也越长,如果在这个时候有一个启动的过渡页,从使用的角度看,能在启动后快速看......
  • 软件开发的一些思考2
    看了一些软件设计方面的资料,大致印象是似乎都在强调灵活的设计,减少耦合,目的在于以后有变动时可以减少改动,这样也在一定程度上减少了出错的可能性。现在觉得今后的需求变动难以预料,但是设计时,防止将来可能出现的bug(而不是将来可能的需求变动),似乎更为重要。当然,将来可能出现的bug,......
  • 架构师提升思考力的建议
    架构师该如何通过独立思考来最大化自己的增值呢?1、架构师的思维定势指的是架构师在思考过程中的基本假设。从某种角度来说,思维定势就是你选择相信什么,或者说你在架构师的生涯中坚信和奉行的那些“主义”。比如整个经济学就建立在“人是理性的”这个基本假设之上。这些“主义”不是......
  • 对隔离级别、事务并发问题、当前读和快照读、相关锁机制的思考
    InnoDB存储引擎涉及事务的四大隔离级别(RU)读未提交、(RC)读已提交、(RR)可重复读、(Serializable)串行化相对事务并发产生的问题:脏读、不可重复读、幻读隔离级别对应事务:RU什么都解决不了,RC解决脏读、RR解决脏读和不可重复读、Serializable都解决其中涉及的锁机制:共享锁、互斥锁、间歇......