发红包案例(RedPacketFrame简介)

Posted 苦海123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发红包案例(RedPacketFrame简介)相关的知识,希望对你有一定的参考价值。

发红包案例:

案例目录结构如下(red包为第三方包,需要的话可以到网上自行下载或私信我邮箱即可):

// 1.这里将借用发红包的框架:RedPacketFrame(图形界面化),OpenMode处理红包分发逻辑的接口(里面只有一个抽象方法,需要自己实现),实现普通红包和手气红包的分发:
// 框架中提供相关参数:totalMoney(红包总金额)、totalCount(要分发的总份数)、divide(int totalMoney, int totalCount)处理方法、ArrayList<Integer>(将处理后的数据放到数组列表中)
/* 2.注意事项: 
普通红包(平均分发):totalMoney / totalCount,平均分发会有除不尽的情况,此时推荐将余数加到最后一份上。
手气红包(随机):手气红包处理逻辑可以自己设计,这里推荐一种常用的设计思想:最少一分钱(java底层已经将钱转换为分计算了),最多不超过平均数的2倍,余额越发越少。
RedPacketFrame为一个抽象类,不能直接new对象,需要通过实现类来使用此抽象类。
setOwnerName("字符串"):此方法是RedPacketFrame框架提供我们修改发红包人名字的。
setOpenWay(OpenWay):设置分发(打开)红包的方式,里面传入OpenWay类型的数据。
*/
import red.OpenMode;
// 3.导入RedPacketFrame抽象类:
import red.RedPacketFrame;//特别提醒:导入一个自定义的包时,需要在包中的java文件中声明包,其格式:package 包中java文件所在的位置,如:package red;
public class Start
    public static void main(String[] args)
        // 5.创建一个红包:
        SonRedPackClass redpack = new SonRedPackClass("测试发红包案例");//这里传入字符串用来设置红包的标题
        redpack.setOwnerName("苦海");//设置发红包人姓名
        // 7.创建平均分发红包对象:
        OpenMode avgredpack = new AvgRedPack();
        // OpenMode randomredpack = new RandomRedPack();//经测试,随机分发红包处理方法可以实现
        redpack.setOpenWay(avgredpack);//设置打开方式为平均分发红包,当着这里可以传入随机分发红包的OpenMode数据
    ;
;
import red.RedPacketFrame;//导入RedPacketFrame用来被继承
// 4.创建一个SonRedPackcCass子类(实现类)来继承RedPacketFrame:
public class SonRedPackClass extends RedPacketFrame
    public SonRedPackClass(String title)//title为图形界面的标题
        super(title);//通过super调用父级的构造方法
    
;
// 6.实现OpenMode接口中的divide方法,这里使用平均分发的思想覆盖重写 divide方法:
import java.util.ArrayList;
import red.OpenMode;
public class AvgRedPack implements OpenMode
    @Override
    public ArrayList<Integer> divide(final int totalMoney,final int totalCount)//因为在整个分发过程中总份数和总钱数不变,这里可以使用final进行修饰,当然不写也可以
        ArrayList<Integer> list = new ArrayList<>();//创建一个数组,用来存放平均分发的每一份数据
        int avg = totalMoney / totalCount;//平均数
        int mod = totalMoney % totalCount;//余数
        // 将平均数通过循环放入到数组中,余数推荐分发给最后一个或第一个,这里将余数分发给最后一个了,如:
        for(int i = 0; i < totalCount;i++)
            if(i == totalCount-1)
                list.add(avg + mod);
            else
                list.add(avg);
            
        ;
        return list;
    ;

// 8.再实现一下OpenMode接口中随机分发红包的方法divide:
import java.util.ArrayList;
import red.OpenMode;
import java.util.Random;
public class RandomRedPack implements OpenMode
    @Override
    public ArrayList<Integer> divide(final int totalMoney,final int totalCount)//因为在整个分发过程中总份数和总钱数不变,这里可以使用final进行修饰,当然不写也可以
        ArrayList<Integer> list = new ArrayList<>();//创建一个数组,用来存放随机分发的每一份数据
        //定义两个变量:剩余金额、剩余分发次数,如:
        int leftMoney = totalMoney;//初始化为总金额,每分发一次,金额减少一次
        int leftCount = totalCount;//初始化为总次数,每分发一次,次数减少一次
        // 通过循环产生随机数,并将产生的随机数放到数字中:
        for(int i = 0; i < totalCount;i++)//前面的人得到随机红包,最后一个人将剩余金额都给他即可,因此这里循环总人数-1
            Random random = new Random();//创建一个随机数生成器
            int money = random.nextInt(leftMoney / leftCount *2) + 1;//生成随机金额,最少应分到1分钱,所以因是1+一个随机数;
            if(i == totalCount-1)
                list.add(leftMoney);
            else
                list.add(money);
            ;
            leftMoney -= money;
            leftCount--;
        ;
        return list;
    ;

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

以上是关于发红包案例(RedPacketFrame简介)的主要内容,如果未能解决你的问题,请参考以下文章

案例分析发红包

Java发红包案例

Java发红包案例

零基础学Java—发红包案例(二十三)

java基础---22. 发红包案例

JAVA发红包案例(主要学习对继承的运用)