用Java模拟微信发红包的实现

大家好,又到了一周一次的分享环节,今天我分享的是模拟微信红包的实现,话不多说,见代码如下:

红包类

public class RedPacket {/**红包ID*/private int id;/**红包金额*/private BigDecimal money;public RedPacket() {}public RedPacket(int id, BigDecimal money) {super();this.id = id;this.money = money;}public int getId() {return id;}public void setId(int id) {this.id = id;}public BigDecimal getMoney() {return money;}public void setMoney(BigDecimal money) {this.money = money;}@Overridepublic String toString() {return id+"号用户获得"+money+"元";}}

红包异常类

public class RedpacketException extends Exception{public RedpacketException() {// TODO Auto-generated constructor stub}public RedpacketException(String msg) {super(msg);}
}

红包功能实现类

public class RedPacketManage {/** 设置每个红包最小金额 */static final BigDecimal MIN = new BigDecimal("0.01");/** @double total 总金额* @int count 红包个数* @return 返回生成的所有红包金额集合*/public static ArrayList<RedPacket> genRedPacket(double total, int count) throws RedpacketException {// 声明临时变量用于存储所有随机的红包对象ArrayList<RedPacket> packets = new ArrayList<RedPacket>();// 计算每个红包分配最低金额一共需要多少钱double min = MIN.multiply(new BigDecimal(count)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();if (min > total) {// 红包金额不够分配时,抛出异常throw new RedpacketException("每个红包金额不能少于0.01元");} else if (min == total) {// 红包金额恰好每人只够分配0.01元,则平均分配for (int i = 0; i < count; i++) {// 创建红包对象RedPacket item = new RedPacket(i + 1, new BigDecimal("0.01"));// 将红包加入集合packets.add(item);}} else {// 当总金额大于每人最少金额之和时,随机分配// 将总金额包装为BigDecimalBigDecimal totalMoney = new BigDecimal(total);//先为每人分配最低金额0.01元for(int i=0;i<count;i++) {packets.add(new RedPacket(i+1, new BigDecimal("0.01")));}//将总金额设置为在原来基础上减去每人最低分配金额totalMoney = totalMoney.subtract(new BigDecimal(min));//声明临时变量统计当前分配的金额总数BigDecimal now = new BigDecimal(0);// 获取每个红包的比例double[] scale = randomScale(count);// 为前count-1个红包分配金额for (int i = 0; i < count - 1; i++) {// 获取当前比例红包需要分配的金额BigDecimal item = totalMoney.multiply(new BigDecimal(scale[i])).setScale(2, BigDecimal.ROUND_HALF_EVEN);//为每人在最低金额基础上增加随机比例金额packets.get(i).setMoney(packets.get(i).getMoney().add(item));//累计已分配金额总数now = now.add(item);}// 剩余的金额给最后一个//获取剩余的金额BigDecimal last = totalMoney.subtract(now);//设置最后一个红包的金额为原来基础上增加剩余的总金额packets.get(count-1).setMoney(packets.get(count-1).getMoney().add(last).setScale(2, BigDecimal.ROUND_HALF_EVEN));}return packets;}/***   随机红包金额比例* @param count 红包的份数* @return 每份红包的比例数组*/private static double[] randomScale(int count) {// 临时数组存储所有红包的金额比例double[] scale = new double[count];Random r = new Random();double total = 0.0;for (int i = 0; i < count; i++) {// 为每一个元素设置一个1-100随机数scale[i] = r.nextInt(100) + 1;// 累计所有随机的数值total += scale[i];}// 循环计算每个红包的金额比例for (int i = 0; i < count; i++) {scale[i] = scale[i] / total;}return scale;}public static void main(String[] args) throws RedpacketException {ArrayList<RedPacket> list = genRedPacket(0.1, 7);BigDecimal t = new BigDecimal(0);for (RedPacket rp : list) {System.out.println(rp);t= t.add(rp.getMoney());}System.out.println(t);}
}

个人心得

这只是模拟红包的实现,但是还是有很多细节上的功能没有考虑到,只能是部分完成,当然了,我毕竟也只是一个新手嘛,就当是给有需要的人提供点帮助吧。

用Java模拟微信红包的实现相关推荐

  1. H5模拟微信红包效果

    H5模拟微信红包效果 技术:html+css+javascript 效果: 代码: ps:项目代码文件评论区见

  2. Java模拟微信发红包

    作者说: 这个实验运用到了Random类的生成随机数的知识.String类的format方法保留两位小数.灵活运用类型转换. 这次注释写的很详细,因为我做这个实验的时候花了很长时间,我第一次用的方法不 ...

  3. Java模拟微信发红包,一看就会

    自2014年1月26日悄悄上线后,微信红包迅速流行开来,其火爆程度,不亚于此前的"打飞机"小游戏.而收到红包后想要提现,就必须绑定银行卡,这样一来,绑定微信支付的用户数量大增. 先 ...

  4. java模拟微信抢红包金额算法规则二倍均值法模拟(满满的注释)

    二倍均值法模拟微信抢红包金额算法规则 ```java /*** 二倍均值法* @param amount 总金额* @param min 最小金额* @param num 个数* 本帖只提供思路,实际 ...

  5. 用python语言模拟微信红包_python 模拟微信抢红包 基础语法实现demo

    1.实现微信抢红包 简易demo版 : 代码如下: from decimalimport Decimal # 提供了随机方法 import random print('$$$$$$weichat模拟微 ...

  6. java 开发微信红包

    1.接口文档 https://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_5 2.证书下载及证书安装 首先,商户调用微信红包接口 ...

  7. 用Java写微信红包实现模拟微信发红包

    继承关系如下 题目: 某软件有多名用户(User类),某群聊中有群主(Manager类)和多名普通成员(Member类),现群主大方给成员发红包.红包的规则:群主发一笔金额,从群主余额中扣除,红包分配 ...

  8. Java模拟微信抢红包

    import java.util.Scanner; import java.util.Random;public class RedBags{public static void main(Strin ...

  9. java调用微信红包接口_java调用微信现金红包接口的心得与体会

    这几天看了下以前写的有关微信支付的博客,看的人仍是挺多的,看了下留言不知道是由于博客写的不够细仍是什么状况,大多都找我要源码,我以为吧程序员仍是须要有这么一个思考的过程,所以没直接给源码,俗话说&qu ...

最新文章

  1. undertale人物_【undertale】传说之下精美人物图包 (Frisk篇)
  2. Visual Studio 2005 2008 2010样式
  3. camera(21)---MTK android AF调试总结
  4. ftk学习记(combox篇)
  5. sql还原数据库备份数据库_有关数据库备份,还原和恢复SQL面试问题–第三部分
  6. MyEclipse中使用Junit插件进行单元测试
  7. Jsoup解析网页html
  8. MyBatis使用动态SQL语句
  9. 邮件管理数据库设计--MySQL
  10. Fragstats 软件安装与下载步骤(附安装包)
  11. learn opencv-使用OpenCV的自动红眼删除
  12. 【经济学视频课程】力量F的属性与…
  13. (转)超全整理!Linux性能分析工具汇总合集
  14. WPF框架剖析(从头开始自己写WPF框架)
  15. Android 使用fastboot命令刷机流程
  16. javascript入门基础篇重点 第二节2.
  17. IEEE2022/遥感:Stagewise UnsupervisedDomain Adaptation WithAdversarial Self-Training for Road Segmentat
  18. JSP内置对象及常用方法
  19. 递推算法之数字三角形求和问题
  20. Jedis实现抽奖功能

热门文章

  1. eclipse mdt java工程_Atitit.uml2 api 的编程代码实现设计uml开发 使用eclipse jar java 版本...
  2. 组图:1936年柏林奥运会
  3. 家庭教育之学生不愿做家务怎么办?
  4. JVM篇·垃圾收集器与内存分配策略
  5. 研一学习生活的总结~
  6. 色散关系与等离子体色散函数的解析性质
  7. 针对戴尔G15部分问题的解决措施
  8. 【Java:线程与进程 详解+案例】
  9. 计算机化学博士点,一流大学建设高校各学科博士点一览
  10. 软件正在吞噬整个世界