父类User
package com.zhiyou100.homework2;
// 定义一个父类
public class User {
// 定义两个私有属性
private String name;
private double leftMoney;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getLeftMoney() {
return leftMoney;
}
public void setLeftMoney(double leftMoney) {
this.leftMoney = leftMoney;
}
// 空参构造
public User() {
}
// 全参构造
public User(String name, double leftMoney) {
this.name = name;
this.leftMoney = leftMoney;
}
// 定义一个查看余额的方法
public void check() {
System.out.println("名字:" + name + ",余额为" + leftMoney + "元");
}
}
群主类
package com.zhiyou100.homework2;
import java.util.ArrayList;
//定义一个群主
public class Lord extends User {
public Lord() {
//super();
}
public Lord(String name, double leftMoney) {
// super(参数列表) 永远要放到构造方法中的第一条语句中
super(name, leftMoney);
}
//send 发红包
/*
群主发红包,就是把一个整数的全额分成若干等份
1.获取群主的余额,是否具备发红包的能力
不能发红包则返回一个null,并且提示:"余额不足!"
2.修改群主的余额,此时群主的余额 = 原来的余额 - 发的红包的额度
3.拆分红包
3.1:如果能够整除,那么就平均分
3.2:如果不能整除,那么就把余数分给最后一份.
*/
public ArrayList<Double> send(int money, int num) {
// 构建一个空的ArrayList容器对象
ArrayList<Double> list = new ArrayList<>();
// 数据的合法性检验
// 获取群主的余额
double leftMoney = super.getLeftMoney();
// 判断是否具备发红包的能力
if (leftMoney < money) {
System.out.println("余额不足");
return list;
}
// 修改群主余额
setLeftMoney(leftMoney - money);
// 拆分红包
// 求商数
double avg = money / num;
// 求余数
double remainder = money % num;
// 等额添加红包 次数减一 ArrayList 是一个有序 可改长度的数组容器
for (int i = 0; i < num - 1; i++) {
list.add(avg);
}
// 把最后一个红包放到list容器的最后一个位置
list.add((avg+remainder));
// 把等额红包返回给方法
return list;
}
}
普通群员类
package com.zhiyou100.homework2;
import java.util.ArrayList;
import java.util.Random;
// 定义一个普通群员类
public class Member extends User {
public Member() {
}
public Member(String name, double leftMoney) {
super(name, leftMoney);
}
// 收红包 receive
public void receive(ArrayList<Double> list){
// 构造一个随机类对象 Random
Random r = new Random();
// 随机一个数是list容器中的索引 索引的取值范围 [0,list.size()]
int index = r.nextInt(list.size());
// 当去取一个红包,那么list容器中就要少一个红包
double money = list.remove(index);
// 普通成员的余额需要增加对应的值
super.setLeftMoney(super.getLeftMoney()+money);
}
}
测试类
package com.zhiyou100.homework2;
import java.util.ArrayList;
// 定义一个红包测试类
public class TestRedPackage {
public static void main(String[] args) {
//构建一个群主
//构建多个成员对象
Lord lord = new Lord("小明", 1000);
Member m1 = new Member("小王", 0);
Member m2 = new Member("小刘", 0);
Member m3 = new Member("小孙", 0);
// 直接给
ArrayList<Double> list = lord.send(200, 3);
// 查看群主的余额
lord.check();
// 加一个判断 群主确定发出了红包
if (list.size() == 0) {
System.out.println("群主发红包失败了,再来");
} else {
// 普通成员收红包
m1.receive(list);
m1.check();
m2.receive(list);
m2.check();
m3.receive(list);
m3.check();
}
}
}