zoukankan      html  css  js  c++  java
  • Java使用ArrayList实现“群主发红包”功能

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

    1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取;
    2. 成员领取红包后,保存到成员余额中。

    请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。

     根据题目可以稍作分析,群主和普通群成员都隶属于用户类,那么久可以建立一个用户类,用户类的属性可以有用户名,金额或者钱包,如下:

     1 package day05_after03;
     2 
     3 /**
     4  * 定义成员类
     5  *
     6  * @author liuwenlong
     7  * @create 2020-07-14 18:08:25
     8  */
     9 @SuppressWarnings("all")
    10 public class Human {
    11     private String name;
    12     private int age;
    13     private int wallet;
    14 
    15     public Human() {
    16     }
    17 
    18     public int getWallet() {
    19         return wallet;
    20     }
    21 
    22     public void setWallet(int wallet) {
    23         this.wallet = wallet;
    24     }
    25 
    26     public Human(String name, int age) {
    27         this.name = name;
    28         this.age = age;
    29     }
    30 
    31     public String getName() {
    32         return name;
    33     }
    34 
    35     public void setName(String name) {
    36         this.name = name;
    37     }
    38 
    39     public int getAge() {
    40         return age;
    41     }
    42 
    43     public void setAge(int age) {
    44         this.age = age;
    45     }
    46 
    47     public String showInfo() {
    48         return getName() + ", 余额:" + getWallet();
    49     }
    50 }

    然后定义一个管理员类,管理员实现发红包的过程,可以通过以下方法

     1  /**
     2      * 群主发红包
     3      *
     4      * @param amount int 红包大小
     5      * @param count  int 红包个数
     6      * @return 返回拆分好的红包数组
     7      */
     8     public ArrayList<Integer> hangOut(int amount, int count) {
     9         ArrayList<Integer> RedPackage = new ArrayList<>();//创建一个数列,存放N份红包
    10         if (!(this.getWallet() < amount)) {
    11             int whole = amount / count;//整的钱
    12             int surplus = amount % count;//余下的钱
    13             for (int i = 0; i < count - 1; i++) {
    14                 RedPackage.add(whole);
    15             }
    16             RedPackage.add((whole + surplus));//余下的加到最后一个上面
    17             int getMoney = getWallet();
    18             setWallet(getMoney - amount);//修改群主的钱包
    19         } else {
    20             System.out.println("余额不足!");
    21             return null;
    22         }
    23         return RedPackage;
    24     }

    whole是要发的金额整除要发的份数,如果有余下的钱则存放到surplus中,使用循环将钱放到可变长数组里,并且将最后一个和余数相加,最后返回该可变长数组。

    接下来就是群成员进行拆分红包,核心代码如下:

     1  /**
     2      * 群成员拆红包
     3      *
     4      * @param redPack 群主打包好的红包数组,随机抽取一个
     5      */
     6     public void receive(ArrayList<Integer> redPack) {
     7         int index = (int) (Math.random() * redPack.size());//从0到当前值取随机数,当前值递减
     8         int numberRedPack = redPack.get(index);//根据下标获取金额
     9         int selfAcount = getWallet();//获取自己之前的金额
    10         setWallet((selfAcount + numberRedPack));//重新设置钱包
    11         redPack.remove(index);//将红包数组内的这个红包删除,个数减少
    12     }

    使用可变长数组ArrayList的好处就是可以不用考虑数组越界的问题。

    最后定义一个测试类,实例化出管理员和三个群成员,

     1 /**
     2  * 群主发红包
     3  *
     4  * @author liuwenlong
     5  * @create 2020-07-14 18:35:04
     6  */
     7 @SuppressWarnings("all")
     8 public class TestRedPack {
     9     public static void main(String[] args) {
    10         ArrayList<Integer> red = new ArrayList<>();
    11         Manage manage = new Manage("管理员", 20, 100);
    12         Member m1 = new Member("张三", 18, 0);
    13         Member m2 = new Member("李四", 17, 0);
    14         Member m3 = new Member("王五", 16, 0);
    15 
    16         System.out.println(manage.showInfo());
    17         System.out.println(m1.showInfo());
    18         System.out.println(m2.showInfo());
    19         System.out.println(m3.showInfo());
    20 
    21         System.out.println("=====================================================");
    22         red = manage.hangOut(20, 3);//群主发红包
    23         m1.receive(red);
    24         m2.receive(red);
    25         m3.receive(red);
    26 
    27         System.out.println(manage.showInfo());
    28         System.out.println(m1.showInfo());
    29         System.out.println(m2.showInfo());
    30         System.out.println(m3.showInfo());
    31 
    32     }
    33 }

    最后将群主拆分好的红包返回到可变长数组red中,然后以此传给每个群成员。最终运行结果如下:

  • 相关阅读:
    lamp----6 实现虚拟主机ssl安全
    lamp-----5 apache虚拟主机实现,发布多个独立站点
    lamp----4 虚拟目录
    lamp----3 访问控制
    Apache配置反向代理、负载均衡和集群(mod_proxy方式)
    lamp-------3 userdir发布用户站点
    lamp------2 发布站点
    [转]KDE/QT与GNOME/GTK比较
    为什么会有文字聊天
    [转]gdb结合coredump定位崩溃进程
  • 原文地址:https://www.cnblogs.com/lwl80/p/13301188.html
Copyright © 2011-2022 走看看