发红包案例(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简介)的主要内容,如果未能解决你的问题,请参考以下文章