Java使用ArrayList实现“群主发红包”功能
Posted 勤快的懒羊羊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java使用ArrayList实现“群主发红包”功能相关的知识,希望对你有一定的参考价值。
群主发普通红包,某群有多名成员,群主给成员发普通红包,普通红包的规则:
- 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取;
- 成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
根据题目可以稍作分析,群主和普通群成员都隶属于用户类,那么久可以建立一个用户类,用户类的属性可以有用户名,金额或者钱包,如下:
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中,然后以此传给每个群成员。最终运行结果如下:
以上是关于Java使用ArrayList实现“群主发红包”功能的主要内容,如果未能解决你的问题,请参考以下文章
为了讲明白继承和superthis关键字,群主发了20块钱群红包
Java中LinkedList类为何无法用List接口引用来实例化
Spring功能介绍SpringMVC集成Java Bean Validation实现参数检验功