运维开发网

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

运维开发网 https://www.qedev.com 2020-01-24 12:40 出处:网络 作者:qq5dda6ecead5a8
java微信红包微信是如今人们日常生活离不开的app,日常交流,小额转账,视频通话等都很方便。微信红包也是人们使用得最多的功能,朋友一起出去吃个饭,饭后AA用微信红包;逢年过节,给亲朋好友发个红包……这篇文章教你用java做个红包小项目!注意事项因为金额涉及到分,小数点后保留两位,数值类型的转换操作需要注意;此中方案相对简陋,并未实现每次红包最大值在0.01-剩余红包均值的2倍间;/*红包设计要求

java微信红包

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

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

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

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

这篇文章教你用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);

    }}

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

0

精彩评论

暂无评论...
验证码 换一张
取 消