温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java实现发红包功能

发布时间:2020-06-10 17:20:13 来源:亿速云 阅读:397 作者:鸽子 栏目:编程语言


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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI