群主发普通红包

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

     解题思路:

群主发普通红包,某群有多名成员,群主给成员发普通红包

//父类
public class User {
    //定义私有变量
    private String name;//姓名
    private double leftMoney;//余额

    //无参构造
    public User() {
    }

    //带参构造
    public User(String name, double leftMoney) {
        this.name = name;
        this.leftMoney = leftMoney;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getLeftMoney() {
        return leftMoney;
    }

    public void setLeftMoney(double leftMoney) {
        this.leftMoney = leftMoney;
    }

    /**
     * 查看余额方法
     */
    public void check() {
        System.out.println("名字:" + name + ",余额为:" + leftMoney);
    }
}
/**
 * 群主类
 */
public class Lord extends User {
    //无参构造
    public Lord() {
    }

    //带参构造
    public Lord(String name, double leftMoney) {
        // super(参数列表); 永远要方到构造中的第一条语句
        super(name, leftMoney);
    }

    /*
     * 思路:
     *   群主发红包,就是把一个整数分成若干等分
     *   1。获取群主的余额,是否具备发红包的能力
     *       不能发红包,则返回一个null,并且提示:”余额不足“
     *   2。修改群主的余额,此时群主的余额=原来的余额-发的红包额度
     *   3。拆分红包;
     *       3.1:等额拆分  那就平均分
     *       3.2:不等额拆分   就把余数分给最后一份
     * */

    /**
     * send 发红包
     *
     * @param money
     * @param num
     * @return
     */
    public ArrayList<Double> send(int money, int num) {
        //构建一个空的ArrayList容器数组存放红包
        ArrayList<Double> liset = new ArrayList<Double>();
        //数据的合法性检验
        //获取群主的余额
        double leftMoney = super.getLeftMoney();
        if (leftMoney < money) {
            System.out.println("余额不足!");
            return liset;
        }
        //修改群主的余额
        setLeftMoney(leftMoney - money);

        //拆分红包
        //求商数
        double avg = money / num;
        //求余数
        double remainder = money % num;

        //等额添加红包  次数减一num-1     ArrayList是一个有序的长度可变的
        for (int i = 0; i < num - 1; i++) {
            liset.add(avg);
        }

        //把最后一个红包放到list容器的最后一个位置
        liset.add(avg + remainder);

        return liset;
    }
}
/**
 * 普通成员类
 */
public class Member extends User {
    //无参构造方法
    public Member() {
    }

    //带参构造方法
    public Member(String name, double leftMoney) {
        super(name, leftMoney);
    }

    /**
     * 收红包 receive
     *
     * @param list
     */
    public void receive(ArrayList<Double> list) {
        //创建一个随机对象 random
        Random r = new Random();
        //随机一个数是list容器中的索引,索引范围[0,list.size())
        int index = r.nextInt(list.size());
        //当取一个红包,那么list容器中就要少一个红包
        Double remove = list.remove(index);
        //普通的成员的余额需要增加对应的值
        super.setLeftMoney(super.getLeftMoney() + remove);
    }
}
//测试类
  public static void main(String[] args) {
        //构建一个群主对象
        Lord l = new Lord("周震南", 1000);
        //构建多个成员
        Member m1 = new Member("南1", 0);
        Member m2 = new Member("南2", 0);
        Member m3 = new Member("南3", 0);

        //群主发红包直接给
        ArrayList<Double> send = l.send(200, 3);
        //查看群主余额
        l.check();//调用查看余额方法

        //加一个判断 群主确定发出了红包
        if (send.size() == 0) {
            System.out.println("群主发红包失败,再来一次!");
        } else {
            //成员收红包
            m1.receive(send);//调用收红包方法
            m1.check();//查看余额

            m2.receive(send);
            m2.check();
            m3.receive(send);
            m3.check();
        }

    }
    运行结果:
名字:周震南,余额为:800.0
名字:南1,余额为:68.0
名字:南2,余额为:66.0
名字:南3,余额为:66.0