繼承的綜合案例:羣主發普通紅包

1.案例
羣主發普通紅包。某羣有多名成員,羣主給成員發普通紅包。普通紅包的規則:

  1. 羣主的一筆金額,從羣主餘額中扣除,平均分成n等份讓成員領取。
  2. 成員領取紅包後,保存到成員餘額中。

請根據描述,完成案例中所有類的定義以及指定類之間的繼承關係,並完成發紅包的操作。
2.案例分析
不管是羣主還是普通成員,他們都是一個用戶類,共性:姓名和餘額。
在這裏插入圖片描述
關鍵的方法有如下兩個:
在這裏插入圖片描述
3.代碼實現

3.1 定義用戶的類

public class User {

    private String name;
    private int money;

    //無參構造
    public User() {
    }

    //全參構造
    public User(String name, int money) {
        this.name = name;
        this.money = money;
    }

    //展示一下當前用戶有多少錢
    public void show(){
        System.out.println("我是:" + name + ";我有多少錢:" + money);

    }

    //getter、 setter
    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;
    }
}

3.2 繼承用戶類,定義羣主類

import java.util.ArrayList;

public class Manager extends User {

    public Manager(){
        // super();
    }

    //調用父類的構造方法
    public Manager(String name, int money) {
        super(name, money);
    }

    //定義發紅包方法
    public ArrayList<Integer> send (int totalMoney,int count){
        //首先需要一個集合,用來存儲若干個紅包的餘額
        ArrayList<Integer> redList = new ArrayList<>();

        //首先看一下羣主自己有多少錢
        int leftMoney = super.getMoney();//羣主當前的餘額
        if(totalMoney > leftMoney){
            System.out.println("餘額不足");
            return redList;//返回空集合
        }

        //扣錢,其實就是重新設置餘額
        super.setMoney(leftMoney - 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;
    }

}

3.3 繼承用戶類,定義成員類

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){
        //從多個紅包中,隨機抽取一個
        //隨機獲取一個集合當中的索引編號
        int index = new Random().nextInt(list.size());
        //根據索引,從集合當中刪除,並且得到被刪除的紅包給自己
        int del = list.remove(index);
        //查看下 當前成員本身有多少錢
        int money = super.getMoney();
        //加法,並且重新設置回去
        super.setMoney(money + del);

    }
}

3.4 測試main

import java.util.ArrayList;

public class MainRedPacket {

    public static void main(String[] args) {

        Manager manager = new Manager("羣主", 100);

        Member one = new Member("成員A", 0);
        Member two = new Member("成員A", 0);
        Member three = new Member("成員A", 0);

        manager.show();
        one.show();
        two.show();
        three.show();
        System.out.println("==============");

        //羣主發紅包,共發20,分三分
        ArrayList<Integer>redList = manager.send(20,3);
        //三個普通成員收紅包
        one.receive(redList);
        two.receive(redList);
        three.receive(redList);

        manager.show();
        one.show();
        two.show();
        three.show();
    }
}

執行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章