发红包案例:
案例目录结构如下(red包为第三方包,需要的话可以到网上自行下载或私信我邮箱即可):
// 1.这里将借用发红包的框架:RedPacketframe(图形界面化),OpenMode处理红包分发逻辑的接口(里面只有一个抽象方法,需要自己实现),实现普通红包和手气红包的分发: // 框架中提供相关参数:totalMoney(红包总金额)、totalCount(要分发的总份数)、divide(int totalMoney, int totalCount)处理方法、ArrayList(将处理后的数据放到数组列表中) 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 divide(final int totalMoney,final int totalCount){//因为在整个分发过程中总份数和总钱数不变,这里可以使用final进行修饰,当然不写也可以
ArrayList 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 divide(final int totalMoney,final int totalCount){//因为在整个分发过程中总份数和总钱数不变,这里可以使用final进行修饰,当然不写也可以
ArrayList 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联系笔者删除。
笔者:苦海



