Java——继承实践——发红包案例

案例:群主发普通红包

1.群主有钱,红包从群主余额扣除,平均分成n等份,让成员领取。
2.成员领取红包后,保存到成员余额中

类:
群主类(发红包的方法)、普通成员类(收红包的方法)、共有一个用户父类(姓名、余额)

发红包的逻辑,三要素:
返回值类型:ArrayList
方法名称:send
参数列表:1.总共发多钱 int totalMoney
2.分成多少份 int count
public ArrayList send(int totalMoney,int count){
}

收红包的逻辑:三要素
返回值类型:void
方法名称:receive
参数列表:ArrayList
public void receive(ArrayList list){ }

一、用户类(父类)

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 + "钱");
    }

    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;
    }
}

二、群主类

//群主的类
public class Manager extends User {
    public Manager(){

    }
    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();
//        System.out.println(leftMoney);
        //判断群主的余额是否够用来发红包
        if (leftMoney < totalMoney){
            System.out.println("余额不足");
            //返回空集合
            return redList;
        }

        //如果余额够的话,就开始扣钱
        super.setMoney(leftMoney - totalMoney);

        //然后确定把发出去的红包分成count份
        int avg = totalMoney / count;
        //mod,如果红包不能够平均分配,那么多余的分给最后一个红包
        int mod = totalMoney % count;
        //最后一个红包等于平均分的金额+零头
        int last = avg + mod;

        //然后开始将 不包括最后一个红包的  红包金额放进redList
        for (int i = 0; i < count - 1; i++) {
            redList.add(avg);
        }
        //将最后一个红包放进redList
        redList.add(last);

        return redList;

    }

}  

三、成员类

import java.util.ArrayList;
import java.util.Random;

/**
 * @author whd
 */
public class Member extends User {
    public Member() {
    }

    public Member(String name, int money) {
        super(name, money);
    }
    //收红包的方法
    public void receive(ArrayList<Integer> list){
        //从红包当中随便抽取一个
        //随机获取一个集合当中的索引编号,list.size()为集合的长度,Random().nextInt(list.size())表示[0,list.size())
        int index = new Random().nextInt(list.size());
        //根据索引,从集合当中删除,并且得到被删除的红包
        int delta = list.remove(index);
        //当前成员自己的余额
        int money = super.getMoney();
        super.setMoney(money + delta);
    }
}

四、主方法


import java.util.ArrayList;

/**
 * @author whd
 */
public class MainRedPacket {
    public static void main(String[] args) {

        //new一个群主,余额200
        Manager manager = new Manager("群主",200);
        //new3个成员
        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,分成三份,将金额返回到redList
        ArrayList<Integer> redList = manager.send(20,3);

        //成员开始收红包
        one.receive(redList);
        two.receive(redList);
        three.receive(redList);
        System.out.println("================");
        //重新看一下各自有多少钱
        manager.show();
        one.show();
        two.show();
        three.show();
        
    }
}

五、运行结果

我是:群主,我有200钱
我是:成员A,我有0钱
我是:成员B,我有0钱
我是:成员C,我有0================
================
我是:群主,我有180钱
我是:成员A,我有8钱
我是:成员B,我有6钱
我是:成员C,我有6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值