Java:微信发红包案例(继承相关例题)

例题描述

发红包项目,针对继承的案例
群主发普通红包:
1.群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2.成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,完成发红包的操作。

例题分析

由题意可知,
关于类,有两个类,一个是群主类,一个是成员类。他们如果想要完成发红包这个动作,可以有两个重复的成员变量,姓名与余额。这时我们可以给她两写一个父类,进而用它们各自继承成员变量即可,优化了程序。
关于方法,对于他们自身来说,群主需要一个发红包的方法,成员需要一个接受红包的方法。
在这里插入图片描述

例题实践

一共四个类,父类User,子类Manager与Person,以及Main方法所在的类。其中包含了继承,匿名对象,JavaBean,ArrayList类的使用。大家有复习继承相关知识的话,可以拿它练练每一步的解析都有写哦,哈哈。

package demo03;
发红包项目,针对继承的案例
群主发普通红包:
1.群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2.成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,完成发红包的操作。
* */
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("你的姓名是:" + this.name + "你的余额为:" + this.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;
    }
}
package demo03;

import java.util.ArrayList;

public class Manager extends User{
    public Manager(){
    }
    public Manager(String name,int money){
        super(name,money);
    }
    //参数1:你总共要发多少钱 ,参数2:你要发多少个包
    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);
        }
        redList.add(avg + mod);//最后一个红包
        return redList;
    }
}
package demo03;

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

public class Person extends User{
    Person(){
    }
    public Person(String name, int money) {
        super(name, money);
    }
    //收红包的方法
    public void receive(ArrayList<Integer> list){
        //从若干红包中抽取一个给我
        //从集合中随机获取一个索引,抽出索引位置的红包
        int index = new Random().nextInt(list.size());
        //根据索引,从集合中删除红包,得到被删除的红包
        int get = list.remove(index);
        //得到红包后,加入到个人总余额里
        int pMoney = super.getMoney();
        super.setMoney(pMoney + get);
        //红包到账
    }
}
package demo03;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Manager man = new Manager("群主",200);

        Person per1 = new Person("小王",0);
        Person per2 = new Person("小红",0);
        Person per3 = new Person("小李",0);
        Person per4 = new Person("小金",0);
        //展示基本信息
        man.show();
        per1.show();
        per2.show();
        per3.show();
        per4.show();
        //群主大气,群主要发红包啦!
        ArrayList<Integer> red = man.send(110,4);
        per1.receive(red);
        per2.receive(red);
        per3.receive(red);
        per4.receive(red);
        //大家现在的信息是
        man.show();
        per1.show();
        per2.show();
        per3.show();
        per4.show();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值