JAVA 群主发红包请红包案例 简易版
程序员文章站
2022-04-24 14:05:49
...
综合案例:群主发红包
群主发普通红包。某群有多名成员,群主给成员发普通红包。
普通红包的规则:
1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2. 成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
案例分析
根据描述分析,得出如下继承体系:
案例实现
定义用户类:
public class User {
//成员变量
private String username;//用户名
private Double leftMoney;//余额
//构造方法
public User(){}
public User(String username, double leftMoney){
this.username=username;
this.leftMoney=leftMoney;
}
//get/set方法
//展示信息的方法
public void show(){
System.out.println("用户名:"+username+",余额为:"+leftMoney+"元");
}
}
定义群主类:
public class QunZhu extends User {
//添加构造方法
public QunZhu(){}
public QunZhu(String username,double leftMoney){
//调用父类方法 super方法
super(username,leftMoney);
}
/*
群主发红包,就是把一个整数的金额 分成若干等份
1.群主的余额是否够发红包
不能则返回null 提示
能 则继续
2.修改群主的余额
3.拆分红包
3.1如果能整除,那么就平分
3.2如果不能平分 ,那么就把余数给最后一个
*/
//money 群主要发的红包
//count 多少个人来抢,要发多少份的红包
public ArrayList<Double> send(int money, int count){
//1.获取群主的余额
Double leftMoney = getLeftMoney();
if (money>leftMoney){
return null;
}
//2.群主的余额减少
setLeftMoney(leftMoney-money);
//创建一个集合 保存等份的金额
ArrayList<Double> list = new ArrayList<>();
//扩大100倍,相当于折算成 以 "分"为单位的,避免小数运算丢失精度的问题
money = money * 100;
//每份的金额
int m = money / count;
//不能整除的余数
int l = money % count;
//无论是否整除, n-1份都是每份的金额
for (int i = 0; i < count - 1; i++) {
//缩小100倍 折算成 "元"
list.add(m/100.0);
}
//判断是否整除
if(l == 0){
//可以整除,最后一份金额,与之前的每份金额一致
list.add(m/100.0);
}else {
//不可以整除,最后一份金额,是之前每份的金额+余数金额
list.add((m+l)/100.0);
}
//返回集合
return list;
}
}
定义成员类:
public class Member extends User {
public Member(){}
public Member( String username,double leftMoney){
super(username, leftMoney);
}
//打开红包,就是从集合中随机抽取一份,保存到自己的余额上
public void openHongBao(ArrayList<Double> list){
//创建Random对象
Random r = new Random();
//随机生成一个角标
int index = r.nextInt(list.size());
//移除一个金额
Double money = list.remove(index);
//直接调用父类方法,保存到余额中
setLeftMoney(money);
}
}
定义测试类:
public class Test {
public static void main(String[] args) {
//创建群主对象
QunZhu qz = new QunZhu("群主", 200);
//创建一个键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入金额:");
int money = sc.nextInt();
System.out.println("请输入个数:");
int count = sc.nextInt();
//发红包
ArrayList<Double> sendList = qz.send(money, count);
//判断 如果余额不足
if (sendList==null){
return;
}
//创建三个成员变量
Member m1 = new Member("张三",0);
Member m2 = new Member("李四",0);
Member m3 = new Member("王五",0);
//打开红包
m1.openHongBao(sendList);
m2.openHongBao(sendList);
m3.openHongBao(sendList);
//展示信息
qz.show();
m1.show();
m2.show();
m3.show();
}
}
有不足之处请指点,大家互相学习..
上一篇: 银行家算法(C语言)