• java 21.发红包案例


    需求

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

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

    概要设计

    用户类 User:

    姓名
    余额
    展示信息
    

    群主类 Manager:

    发红包
        0. 发红包的金额要小于余额
        1. 存储红包的数组
        2. 发的红包要分成n等份
        3. 群主余额扣减
        4. 返回红包数组
    

    普通成员类 Member:

    收红包
        1. 接收一个红包数组
        2. 成员根据数组的索引领取红包
            随机获取数组中的索引,然后将索引对应的金额从数组中移除,给到自己账户
        3. 成员的余额增加
    

    示例代码

    User.java

    package redEnvelope;
    
    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("我叫:" + name + ",余额:" + 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;
        }
    }
    

    Manager.java

    package redEnvelope;
    
    import java.util.ArrayList;
    
    public class Manager extends User{
    
        public Manager(){
            //这里留空,编译器会默认给加一个super();
        }
    
        public Manager(String name, int money) {
            super(name, money);
        }
    
        public ArrayList<Integer> send(int money, int count) {
            int balance = super.getMoney();
    
            //1. 存储红包的数组
            ArrayList<Integer> redList = new ArrayList<>();
    
            //0. 异常检测
            if(money > balance){
                System.out.println("余额不足");
                return redList;
            }
    
            //2. 发的红包要分成n等份
            int avg = money / count;
            int mod = money % count;
            for (int i = 0; i < count-1; i++) {
                redList.add(avg);
            }
            int last = avg + mod;
            redList.add(last);
            System.out.println("红包数组:" + redList);
    
            //3. 群主余额扣减
            super.setMoney(balance - money);
    
            //4. 返回红包数组
            return redList;
        }
    }
    

    Member.java

    package redEnvelope;
    
    import java.util.ArrayList;
    import java.util.Random;
    
    public class Member extends User {
    
        public Member(){
    
        }
    
        public Member(String name, int money) {
            super(name, money);
        }
    
        public void receive(ArrayList<Integer> list){
            Random r = new Random();
            int index = r.nextInt(list.size());
            int delta = list.remove(index);
            int money= super.getMoney();
            super.setMoney(money + delta);
        }
    }
    

    DemoMain.java

    package redEnvelope;
    
    import java.util.ArrayList;
    
    public class DemoMain {
        public static void main(String[] args) {
            Manager manager = new Manager("唐三藏",100);
            Member a = new Member("孙悟空", 1);
            Member b = new Member("猪八戒", 2);
            Member c = new Member("沙悟净", 3);
            Member d = new Member("孙悟空", 0);
            Member e = new Member("猪八戒", 0);
            Member f = new Member("沙悟净", 0);
            System.out.println("当前群主及成员的余额:");
            manager.show();
            a.show();
            b.show();
            c.show();
            d.show();
            e.show();
            f.show();
            ArrayList redList = manager.send(34,6);
            a.receive(redList);
            b.receive(redList);
            c.receive(redList);
            d.receive(redList);
            e.receive(redList);
            f.receive(redList);
            System.out.println("抢完红包后,群主及成员的余额:");
            manager.show();
            a.show();
            b.show();
            c.show();
            d.show();
            e.show();
            f.show();
        }
    
    }
    

    当前群主及成员的余额:
    我叫:唐三藏,余额:100
    我叫:孙悟空,余额:1
    我叫:猪八戒,余额:2
    我叫:沙悟净,余额:3
    我叫:孙悟空,余额:0
    我叫:猪八戒,余额:0
    我叫:沙悟净,余额:0
    红包数组:[5, 5, 5, 5, 5, 9]
    抢完红包后,群主及成员的余额:
    我叫:唐三藏,余额:66
    我叫:孙悟空,余额:6
    我叫:猪八戒,余额:7
    我叫:沙悟净,余额:8
    我叫:孙悟空,余额:5
    我叫:猪八戒,余额:9
    我叫:沙悟净,余额:5

    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    C# 重绘图片.图片加字,加矩形,加圆,加线,根据XY坐标修改RGB
    Net5 WorkService 继承 Quarzt 以及 Net5处理文件上传
    select高级用法之各种连接
    mysqladmin客户端命令详解
    Mysql 配置文件管理
    kubeadm 部署的etcd集群管理
    数据库客户连接管理及配置文件
    Mysql 用户创建及授权管理
    在k8s 1.19+版本中部署traefik 2.X版本 ingress控制器
    JS 关闭页面窗口通用方法,兼容各个浏览器
  • 原文地址:https://www.cnblogs.com/kknote/p/15322344.html
Copyright © 2020-2023  润新知