群主发普通红包,某群有多名成员,群主给成员发普通红包,普通红包的规则:
2.群主的一笔资金,从群主的余额中扣除,平均分成n等份,让成员领取;
3.成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及类之间的继承关系,并完成发红包的操作。
解题思路:
//父类
public class User {
//定义私有变量
private String name;//姓名
private double leftMoney;//余额
//无参构造
public User() {
}
//带参构造
public User(String name, double leftMoney) {
this.name = name;
this.leftMoney = 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 void check() {
System.out.println("名字:" + name + ",余额为:" + leftMoney);
}
}
/**
* 群主类
*/
public class Lord extends User {
//无参构造
public Lord() {
}
//带参构造
public Lord(String name, double leftMoney) {
// super(参数列表); 永远要方到构造中的第一条语句
super(name, leftMoney);
}
/*
* 思路:
* 群主发红包,就是把一个整数分成若干等分
* 1。获取群主的余额,是否具备发红包的能力
* 不能发红包,则返回一个null,并且提示:”余额不足“
* 2。修改群主的余额,此时群主的余额=原来的余额-发的红包额度
* 3。拆分红包;
* 3.1:等额拆分 那就平均分
* 3.2:不等额拆分 就把余数分给最后一份
* */
/**
* send 发红包
*
* @param money
* @param num
* @return
*/
public ArrayList<Double> send(int money, int num) {
//构建一个空的ArrayList容器数组存放红包
ArrayList<Double> liset = new ArrayList<Double>();
//数据的合法性检验
//获取群主的余额
double leftMoney = super.getLeftMoney();
if (leftMoney < money) {
System.out.println("余额不足!");
return liset;
}
//修改群主的余额
setLeftMoney(leftMoney - money);
//拆分红包
//求商数
double avg = money / num;
//求余数
double remainder = money % num;
//等额添加红包 次数减一num-1 ArrayList是一个有序的长度可变的
for (int i = 0; i < num - 1; i++) {
liset.add(avg);
}
//把最后一个红包放到list容器的最后一个位置
liset.add(avg + remainder);
return liset;
}
}
/**
* 普通成员类
*/
public class Member extends User {
//无参构造方法
public Member() {
}
//带参构造方法
public Member(String name, double leftMoney) {
super(name, leftMoney);
}
/**
* 收红包 receive
*
* @param list
*/
public void receive(ArrayList<Double> list) {
//创建一个随机对象 random
Random r = new Random();
//随机一个数是list容器中的索引,索引范围[0,list.size())
int index = r.nextInt(list.size());
//当取一个红包,那么list容器中就要少一个红包
Double remove = list.remove(index);
//普通的成员的余额需要增加对应的值
super.setLeftMoney(super.getLeftMoney() + remove);
}
}
//测试类
public static void main(String[] args) {
//构建一个群主对象
Lord l = new Lord("周震南", 1000);
//构建多个成员
Member m1 = new Member("南1", 0);
Member m2 = new Member("南2", 0);
Member m3 = new Member("南3", 0);
//群主发红包直接给
ArrayList<Double> send = l.send(200, 3);
//查看群主余额
l.check();//调用查看余额方法
//加一个判断 群主确定发出了红包
if (send.size() == 0) {
System.out.println("群主发红包失败,再来一次!");
} else {
//成员收红包
m1.receive(send);//调用收红包方法
m1.check();//查看余额
m2.receive(send);
m2.check();
m3.receive(send);
m3.check();
}
}
运行结果:
名字:周震南,余额为:800.0
名字:南1,余额为:68.0
名字:南2,余额为:66.0
名字:南3,余额为:66.0
原文:https://blog.51cto.com/14954368/2546455