教你用java做个微信红包,自己做运气王!

java微信红包

微信是如今人们日常生活离不开的app,日常交流,小额转账,视频通话等都很方便。

微信红包也是人们使用得最多的功能,朋友一起出去吃个饭,饭后AA用微信红包;逢年过节,给亲朋好友发个红包……

这篇文章教你用java做个红包小项目!
注意事项
因为金额涉及到分,小数点后保留两位,数值类型的转换操作需要注意;
此中方案相对简陋,并未实现每次红包最大值在0.01-剩余红包均值的2倍间;
/*

  • 红包设计要求:
  • 1-红包最小值为0.01,最大值为200
  • 2-红包的金额面值为小数点后两位
  • 3-避免单个红包数值太大,通过系数设定
  • 4-红包总量满足金额数
  • */public class RedPacketUtil {
    //微信红包的最大值和最小值,和最大红包金额系数
    private static final float MINMUM = 0.01f;
    private static final float MAXMUM = 200.00f;
    private static final float TIMES = 2.1f;

    //判断当前金额和数量是否正确
    public boolean isRight(float money,int count){
    //计算当前平均值
    float ave = (float)money / count;
    if(ave < MINMUM){
    return false;
    }else if(ave > MAXMUM){
    return false;
    }
    return true;
    }

    //生成每个具体红包的金额
    public float redPacket(float money, float min, float maxs, int count) {
    //判断当前人数
    if(count == 1){
    //确保红包不小于0.01元
    money = money > MINMUM ? money : MINMUM;
    return (float)(Math.round(money 100)) / 100;
    }
    float max = maxs > money ? money : maxs;
    //生成单个红包数量,且保证红包的精度
    float one = (float) (Math.random()
    (max - min) + min);
    one = (float)(Math.round(one * 100)) / 100;

    float moneyRest = (money - one);
    
    //判断当前红包数量是否合理
    if(isRight(moneyRest,count - 1)){
        return one;
    }else{
        //重新分配红包
        float ave = (float)moneyRest / (count-1);
        if(ave < MINMUM){
            return redPacket(money,min,one,count);
        }else if(ave > MAXMUM){
            return redPacket(money,one,max,count);
        }
    }
    return one;

    }

    //拆分红包,生成具体的红包数
    public List<Float> splitRedPacket(float money,int count){
    //判断当前金额和数量是否正确
    if(!isRight(money,count)){
    return null;
    }
    //记录每个红包的数量
    List<Float> rpList = new ArrayList<Float>();
    //单个红包的最大金额
    float max = (float)(money * TIMES)/ count ;
    max = max > MAXMUM ? MAXMUM : max;
    float one = 0;
    //开始记录每个红包的数量
    for(int i = 0;i < count;i++){
    one = redPacket(money,MINMUM,max,count-i);
    rpList.add(one);
    money = money - one;
    }
    return rpList;
    }

    public static void main(String[] args) {
    RedPacketUtil util = new RedPacketUtil();
    List<Float> result = util.splitRedPacket(200, 10);
    System.out.println(result);
    //验证金额总数
    float sum = 0;
    for(float i : result){
    sum = sum + i;
    }
    System.out.println(sum);
    }}

原文地址:https://blog.51cto.com/14623707/2464505

时间: 2024-10-14 15:03:20

教你用java做个微信红包,自己做运气王!的相关文章

微信红包算法

微信红包有多种玩法,其中一种就是指定金额.人数(m),拆红包的人收到的金额是随机,收到的金额保留两位小数,至少有一分,所有人的红包加起来等于指定金额. 我想到一种做法就是:将指定金额放大100倍,也就是变成单位"分",这时金额就是整数了,设为n,从1到n这个整数区间随机抽取m(是人数)个整数,这样1到n的整数区间就分成了m或m+1(这种情况,最后的两个区间合成一个区间)个区间. 比如输入金额1.00元,人数m=3,n=100 * 1.从1到100之间随机选中的三个整数为15.42.88

基于微信红包插件的原理实现android任何APP自动发送评论(已开源)

背景 地址:https://github.com/huijimuhe/postman 核心就是android的AccessibilityService,回复功能api需要23以上版本才行. 其实很像在做单元测试.你可以有n种方式实现发帖功能,这只是一个比较邪火的方式,亲测过一次,可行.这里我以网易新闻客户端举例. 模拟你在手机端的物理动作:选择新闻->回复->退回新闻列表->进入下一个新闻->回复->退回新闻列表刷新->进入->回复.... 做的不精细,只是探究到

教妹学 Java:大有可为的集合

00.故事的起源 “二哥,上一篇<泛型>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很是关心. “有人评论说,‘二哥你敲代码都敲出幻想了啊.’” “呵呵,这句话充斥着满满的讽刺意味啊.”三妹有点难过了起来. “不过,也有人评论说,‘建议这个系列的文章多写啊,因为我花了半个月都没看懂< Java 编程思想>中关于泛型的讲解,但再看完这篇文章后终于融会贯通了,比心.’” “二哥,你能不能先说好消息啊?真是的.我也要给这位暖心的读者比心了.”三妹说完这句话就在

做一个微信语音点播系统

最近在做一个微信项目,接触到了微信公众平台.通过公众平台可以很方便的搭建一个功能完善的移动应用.昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口. 这篇文章的应用将使用到高级接口中的语音识别,以及音乐回复接口.通过这两个接口,让大家体验一下语音点歌的魅力. 这个应用简单的来说:就是你向微信公众平台报一首歌名,微信公众平台返回这首歌曲给你听.本文将一步一步教你如何实现这个看似复杂的移动应用. 下面是我申请的测试账号的二维码,大家可以关注一下测试一下效果,不过测试账号的有效期只有一年,最

微信红包的实现

封装一个微信用包类,主要的功能有|: 红包中存有钱,多少个人分:每个分到的钱数,及获收红包的时间: 主要的功能有 打开红包:(如果打开红包的人数没有达到上限,则可以打开,并随机获得金额) 查看红包分配信息: 设置截止日期:(如果超过最大金额,则再打时提示过期) 思路:微信红包类应该具有的属性有红包金额,红包数,过期时间,领红包的人,时间等. 难点在于:将红包如何分成几份,等可能的被其他人抢到,而且不会出现为0的红包. 首先运用取随机数的类,每次取当前所剩金额的随机数,然后将这些分好的红包放到数组

2015年随微信红包即将爆发!

2015年1月的消息,微信即将升级的6.1版本中会出现摇一摇的红包和卡券的功能.此功能意味着,将来“摇一摇”除了寻找朋友,还会成为连通线上和线下的桥梁.在这里一个不可忽视的技术概念是“iBeacon技术”. iBeacon是苹果公司2013年6月推出的技术,并在9月发布的移动设备上配备了此新功能:通过蓝牙(BLE)进行精准定位,当智能设备靠近iBeacon信标时,设备能感应到iBeacon信号,商家因此能为消费者提供基于位置的相关信息,在适当的时间和地点向用户推送所需要的信息. 这是一个简单的场

微信红包金额分配的算法 http://timyang.net/architecture/wechat-red-packet/

虽然春节已经过去一段时间,但不少微信群里面依旧乐此不疲的在玩发红包活动,用户自发的将最初的一个春节拜年的场景功能慢慢演化成一个长尾功能. 用户在微信中抢红包时分成抢包和拆包两个操作.抢包决定红包是否还有剩余金额,但如果行动不够迅速,在拆包阶段可能红包已经被其他用户抢走的情况. 红包的金额是在什么时候算? 据某架构群腾讯财付通专家反馈,红包的金额是拆的时候实时计算,而不是预先分配,实时计算基于内存,不需要额外存储空间,并且实时计算效率也很高.每次拆红包时,系统取0.01到剩余平均值*2之间作为红包

微信红包资本论

“ 微信红包告诉你什么是资本运作.仅仅2天时间微信绑定个人银行卡2亿张,干了支付宝8年的事.若30%的人发100元红包,共形成60亿的资金流动,延期一天支付,民间借贷目前月息2%,每天保守收益就420万元,若30%用户没选择领取现金,那么其账户可以产生18亿的现金沉淀,无利息…这才是资本游戏. ” 新年刚过,红包大战硝烟未远,网上一则消息开始流行.根据查阅的资料从以下方面进行分析: 1.绑定卡的数量和资金 中国共计13亿人,平均每6个人就有一个绑定微信支付,这是不可能的数字.30%的人发红包也只

对微信红包的一些看法

包括: 一.喜欢微信红包的主要原因 二.个人觉得的亮点和不足的地方 三.从微信红包中的一些感悟 个人只有大年30,大年初一两天和这些红包接触多点,谈下个人的感想吧. 微信红包: 个人比较喜欢这个. 一.喜欢的主要原因: 1.习惯用微信和朋友交流. 2.微信红包做得不是特别的差,该有的功能都有. 总的来说,个人觉得我用微信红包不是因为微信红包做得好,而是微信做得好. 二.亮点和不足的地方: 亮点:什么是亮点,用户觉得好的地方就是亮点.目前个人用还未发现,只能说,该有的都有,一个红包也起码应该这样.