zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    IDEA使用Git传放项目
    前端自适应知识点
    数据可视化
    vue调用Moment显示时间
    java判断通常的逻辑
    java常用的逻辑
    java匿名内部类练习
    java 匿名内部类
    java 内部类定义在局部时需要注意的情况
    java内部类的定义原则
  • 原文地址:https://www.cnblogs.com/kknote/p/15322344.html
Copyright © 2011-2022 走看看