欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

继承的综合案例

程序员文章站 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();

    }
}

相关标签: 练习 java