群主发红包(继承)

群主发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则:

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

public class User {
    private String username;
    private double leftmoney;

    public User(String username, double leftmoney) {
        this.username = username;
        this.leftmoney = leftmoney;
    }

    public User() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public double getLeftmoney() {
        return leftmoney;
    }

    public void setLeftmoney(double leftmoney) {
        this.leftmoney = leftmoney;
    }
public void show() {
    System.out.println("用户名" + username + ",余额为" + leftmoney);
}
}
QuZhu类
package com.itheima.demo1;

import java.util.ArrayList;

//群主发红包,就是吧一个整数的金额,分层若干等分
/*
1.获取群主金额,是否能够发红包,不能则返回null,并提示,能则继续。
2.修改群主余额
3.拆分红包
如果能整除,那么就平均分
如果不能整除,那么就吧余额分给最后一份
 */
public class QuZhu extends User{
    public QuZhu(String username, double leftmoney) {
        super(username, leftmoney);
    }

    public QuZhu() {
    }
    public ArrayList<Double> send(int money, int count) {
        //获取群主余额
        double leftmoney = getLeftmoney();
        if(money>leftmoney){
            return null;
        }
        //修改群主余额
        setLeftmoney(leftmoney-money);
        //创建一个一个集合,保存等分金额
        ArrayList<Double> list = new ArrayList<>();
        //扩大100倍,相当于算成以分为单位,避免小数运算损失精度的问题
        money = money*100;
        //每份的金额
        int m = money/count;
        //不能整除的余数;
        int l = money%count;
        //无论是否整除,n-1份,都是每份的等额金额
        for (int i = 0; i < count - 1; i++) {
            //缩小100倍,折算成元;
            list.add(m/100.0);
        }
        //判断是否整除
        if(l==0){
            //最后一份金额与之前的每份金额保持一致
            list.add((m+1)/100.0);
        }else {
            //不能整除,最后一份的金额是之前每份金额+余数金额
            list.add((m+l)/100.0);
        }
        return list;
    }
}
Member类
package com.itheima.demo1;

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

public class Member extends User {
    public Member(String username, double leftmoney) {
        super(username, leftmoney);
    }

    public Member() {
    }

    //打开红包,就是从集合中,随机取出一份,保存到自己的余额中。
    public void openhongbao(ArrayList<Double> list) {
        Random r = new Random();
        int index = r.nextInt(list.size());
        //移除一个金额
        Double money = list.remove(index);
//直接调用父类方法,设置到余额
        setLeftmoney(money);

    }
}
测试类
package com.itheima.demo1;

import com.itheima.demo.MyTest;


import java.util.ArrayList;
import java.util.Scanner;

public class Test12 {


    public static void main(String[] args) {
//创建一个群主对象
        QuZhu qz = new QuZhu("群主", 200);
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入金额");
        int money = sc.nextInt();
        System.out.println("请输入个数");
        int count = sc.nextInt();
//发送红包
        ArrayList<Double> sendList = qz.send(money, count);
        //判断如果余额不足
        if (sendList == null) {
            System.out.println("余额不足");
            return;
        }
        //创建三个成员
        Member m1 = new Member();
        Member m2 = new Member();
        Member m3 = new Member();
        m1.setUsername("cherry");
        m2.setUsername("lisa");
        m3.setUsername("yingtao");
        //打开红包
        m1.openhongbao(sendList);
        m2.openhongbao(sendList);
        m3.openhongbao(sendList);
        //展示信息
        qz.show();
        m1.show();
        m2.show();
        m3.show();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值