JAVA 群主发红包请红包案例 简易版

综合案例:群主发红包

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

案例分析

根据描述分析,得出如下继承体系:

案例实现 

定义用户类:

public class User {

    //成员变量
    private String username;//用户名
    private Double leftMoney;//余额

    //构造方法
    public User(){}
    public User(String username, double leftMoney){
        this.username=username;
        this.leftMoney=leftMoney;
    }

   //get/set方法

    //展示信息的方法
    public void show(){
        System.out.println("用户名:"+username+",余额为:"+leftMoney+"元");
    }
}

定义群主类:

public class QunZhu extends User {

    //添加构造方法
    public QunZhu(){}
    public QunZhu(String username,double leftMoney){
        //调用父类方法 super方法
        super(username,leftMoney);
    }
    /*
        群主发红包,就是把一个整数的金额 分成若干等份
            1.群主的余额是否够发红包
                不能则返回null 提示
                能 则继续
             2.修改群主的余额
             3.拆分红包
                3.1如果能整除,那么就平分
                3.2如果不能平分 ,那么就把余数给最后一个
     */
    //money 群主要发的红包
    //count  多少个人来抢,要发多少份的红包
    public ArrayList<Double> send(int money, int count){
        //1.获取群主的余额
        Double leftMoney = getLeftMoney();
        if (money>leftMoney){
            return null;
        }
        //2.群主的余额减少
        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/100.0);
        }else {
            //不可以整除,最后一份金额,是之前每份的金额+余数金额
            list.add((m+l)/100.0);
        }
        //返回集合
        return list;
    }

}

定义成员类:

public class Member extends User {
    public Member(){}
    public Member( String username,double leftMoney){
        super(username, leftMoney);
    }
    //打开红包,就是从集合中随机抽取一份,保存到自己的余额上
    public void openHongBao(ArrayList<Double> list){
        //创建Random对象
        Random r = new Random();
        //随机生成一个角标
        int index = r.nextInt(list.size());
        //移除一个金额
        Double money = list.remove(index);
        //直接调用父类方法,保存到余额中
        setLeftMoney(money);

    }
}

定义测试类:

public class Test {
    public static void main(String[] args) {

        //创建群主对象
        QunZhu qz = new QunZhu("群主", 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){
            return;
        }

        //创建三个成员变量
        Member m1 = new Member("张三",0);
        Member m2 = new Member("李四",0);
        Member m3 = new Member("王五",0);

        //打开红包
        m1.openHongBao(sendList);
        m2.openHongBao(sendList);
        m3.openHongBao(sendList);

        //展示信息
        qz.show();
        m1.show();
        m2.show();
        m3.show();

    }
}

 

        有不足之处请指点,大家互相学习..

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值