欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-24 14:05:49
...

综合案例:群主发红包

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

案例分析

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

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

案例实现 

定义用户类:

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();

    }
}

 

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

 

相关标签: 题库