继承的综合案例
程序员文章站
2022-07-04 18:49:32
...
案例:群主发红包
分析:
群主发红包,某群有多名成员,群主给成员发普通红包,普通红包的规则:
- 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
- 成员领取后,保存到成员余额中。
根据描述,完成案例中所有类的定义以及指定类之前的继承关系,并完成发红包的操作。
我们分析完发现里面可以分成 群主类,和成员类。
群主类呢有个发红包的方法,成员类呢有个收红包的方法。
两个都有姓名和余额,这个可以封装到一个父类方法中,我们称之为User类
那我们就需要三个类,和一个实现的类
父类 - User 类
群主类 - Manager类
成员类 - Member类
实现类 -Main类
- 这个是User类
package Day3;/*
*@author wanghongyuan
*@Create 2020/12/9 20:01
*/
public class User {
private String name;
private int money;
public void show(){
System.out.println("名字是:"+name+",余额是:"+money);
// System.out.println("余额是:"+ money);
}
public User() {
}
public User(String name, int money) {
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
- 这是个Manager类
package Day3;/*
*@author wanghongyuan
*@Create 2020/12/9 20:02
*/
import java.util.ArrayList;
public class Manager extends User{
public Manager(){
}
// 群主有多少钱,叫什么名字,作为构造参数传给Manager。
public Manager(String name, int money) {
super(name, money);// 下面去调用父类的构造方法,父类将姓名和余额,放到父类定义好的姓名和余额中。
}
// count 是几这个ArrayList就是几
public ArrayList<Integer> send(int totalMoney,int count){
// 首先需要一个集合,用来存储若干个红包的金额
ArrayList<Integer> redList = new ArrayList<>();
// 首先看看群主自己有多少钱
int leftManey =super.getMoney(); // 群主当前余额
// 如果要发的金额大于群主自己的余额
if (totalMoney > leftManey){
System.out.println("余额不足!");
return redList; //返回一个空的集合
}
// 如果不是上面的情况,那么群主就可以发钱,发钱的话就要扣群主的钱
// 扣钱,其实就是重新设置余额
super.setMoney(leftManey - totalMoney);
//发红包需要平均拆分成为count份
int avg = totalMoney/count;
int mod = totalMoney%count;//余数,也就是甩下的零头
// 剩下的除不开的零头,包在最后一个红包中
// 下面把红包一个一个放到集合中
for (int i = 0; i < count-1; i++) {
redList.add(avg);
}
// 最后一个红包
int last = avg+mod;
redList.add(last);
return redList;
}
}
- Member类
package Day3;/*
*@author wanghongyuan
*@Create 2020/12/9 20:02
*/
import java.util.ArrayList;
import java.util.Random;
public class Member extends User {
public Member() {
}
public Member(String name, int money) {
super(name, money);
}
public void receive(ArrayList<Integer> list){
//从多个红包当中随便抽取一个,给自己。
// 随机获取一个集合当中的索引编号,匿名对象.nestInt需要有个范围
// 所以用list.size();
int index = new Random().nextInt(list.size());
// 根据索引,从集合中删除。并且得到被删除的红包,给我自己
int detal = list.remove(index);
// 当前成员自己本来有多少钱:
int money = super.getMoney();
// 加上抢到的红包,并且设置回去
super.setMoney(money+detal);
}
}
- Main类
package Day3;/*
*@author wanghongyuan
*@Create 2020/12/9 20:03
*/
import java.util.ArrayList;
public class MainTestRedpacket {
public static void main(String[] args) {
Manager manager = new Manager("群主",100);
Member one = new Member("成员A",0);
Member two = new Member("成员B",0);
Member three = new Member("成员C",0);
manager.show();
one.show();
two.show();
three.show();
System.out.println("==========================");
// 群主总共发了20个红包,分成3个红包
ArrayList<Integer> redList = manager.send(20, 3);
// 群主发了红包你们三个人去收红包吧,随便选一个,删掉一个,自己再去更新一下自己的余额
one.receive(redList);
two.receive(redList);
three.receive(redList);
manager.show();
// 6,6,8随机发给3个人
one.show();
two.show();
three.show();
}
}
上一篇: OpenGL学习(1)——创建窗口
下一篇: OpenGL学习之路(1)