Java基于ArrayList实现群主发红包功能
作者:勤快的懒羊羊 时间:2022-04-06 20:34:09
群主发普通红包,某群有多名成员,群主给成员发普通红包,普通红包的规则:
群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取;
成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
根据题目可以稍作分析,群主和普通群成员都隶属于用户类,那么久可以建立一个用户类,用户类的属性可以有用户名,金额或者钱包,如下:
package day05_after03;
/**
* 定义成员类
*
* @author liuwenlong
* @create 2020-07-14 18:08:25
*/
@SuppressWarnings("all")
public class Human {
private String name;
private int age;
private int wallet;
public Human() {
}
public int getWallet() {
return wallet;
}
public void setWallet(int wallet) {
this.wallet = wallet;
}
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String showInfo() {
return getName() + ", 余额:" + getWallet();
}
}
然后定义一个管理员类,管理员实现发红包的过程,可以通过以下方法
/**
* 群主发红包
*
* @param amount int 红包大小
* @param count int 红包个数
* @return 返回拆分好的红包数组
*/
public ArrayList<Integer> hangOut(int amount, int count) {
ArrayList<Integer> RedPackage = new ArrayList<>();//创建一个数列,存放N份红包
if (!(this.getWallet() < amount)) {
int whole = amount / count;//整的钱
int surplus = amount % count;//余下的钱
for (int i = 0; i < count - 1; i++) {
RedPackage.add(whole);
}
RedPackage.add((whole + surplus));//余下的加到最后一个上面
int getMoney = getWallet();
setWallet(getMoney - amount);//修改群主的钱包
} else {
System.out.println("余额不足!");
return null;
}
return RedPackage;
}
whole是要发的金额整除要发的份数,如果有余下的钱则存放到surplus中,使用循环将钱放到可变长数组里,并且将最后一个和余数相加,最后返回该可变长数组。
接下来就是群成员进行拆分红包,核心代码如下:
/**
* 群成员拆红包
*
* @param redPack 群主打包好的红包数组,随机抽取一个
*/
public void receive(ArrayList<Integer> redPack) {
int index = (int) (Math.random() * redPack.size());//从0到当前值取随机数,当前值递减
int numberRedPack = redPack.get(index);//根据下标获取金额
int selfAcount = getWallet();//获取自己之前的金额
setWallet((selfAcount + numberRedPack));//重新设置钱包
redPack.remove(index);//将红包数组内的这个红包删除,个数减少
}
使用可变长数组ArrayList的好处就是可以不用考虑数组越界的问题。
最后定义一个测试类,实例化出管理员和三个群成员,
/**
* 群主发红包
*
* @author liuwenlong
* @create 2020-07-14 18:35:04
*/
@SuppressWarnings("all")
public class TestRedPack {
public static void main(String[] args) {
ArrayList<Integer> red = new ArrayList<>();
Manage manage = new Manage("管理员", 20, 100);
Member m1 = new Member("张三", 18, 0);
Member m2 = new Member("李四", 17, 0);
Member m3 = new Member("王五", 16, 0);
System.out.println(manage.showInfo());
System.out.println(m1.showInfo());
System.out.println(m2.showInfo());
System.out.println(m3.showInfo());
System.out.println("=====================================================");
red = manage.hangOut(20, 3);//群主发红包
m1.receive(red);
m2.receive(red);
m3.receive(red);
System.out.println(manage.showInfo());
System.out.println(m1.showInfo());
System.out.println(m2.showInfo());
System.out.println(m3.showInfo());
}
}
最后将群主拆分好的红包返回到可变长数组red中,然后以此传给每个群成员。最终运行结果如下:
来源:https://www.cnblogs.com/lwl80/p/13301188.html
标签:Java,ArrayList,红包,功能
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
iOS WebView中使用webp格式图片的方法
2023-06-17 22:06:03
分享Java多线程实现的四种方式
2022-02-23 06:34:21
java中的GC收集器详情
2021-11-22 16:59:34
![](https://img.aspxhome.com/file/2023/2/67002_0s.png)
Java经典面试题最全汇总208道(三)
2023-11-15 23:30:42
![](https://img.aspxhome.com/file/2023/6/59066_0s.jpg)
关于jdk环境变量的配置方式解读
2023-04-22 14:53:05
![](https://img.aspxhome.com/file/2023/6/61306_0s.png)
Springcloud Config配置中心使用与相关介绍
2021-07-13 05:15:17
![](https://img.aspxhome.com/file/2023/2/66022_0s.png)
教你如何用好 Java 中的枚举
2022-11-03 10:31:21
利用Java计算某个日期是星期几
2023-11-17 05:49:42
Spring Boot教程之利用ActiveMQ实现延迟消息
2023-11-23 18:25:09
![](https://img.aspxhome.com/file/2023/4/59484_0s.png)
Mybatis中注解@MapKey的使用详解
2023-11-24 21:43:35
Java I/O中I/O流的典型使用方式详解
2023-07-08 21:07:51
java使用RandomAccessFile类基于指针读写文件实例代码
2021-07-29 17:45:45
java中LinkedList使用迭代器优化移除批量元素原理
2021-12-05 11:26:07
![](https://img.aspxhome.com/file/2023/0/66180_0s.png)
MyBatis-Plus拦截器实现数据权限控制的示例
2022-12-10 05:10:17
struts中动态方法调用使用通配符
2023-02-01 02:52:43
![](https://img.aspxhome.com/file/2023/6/70496_0s.png)
Java聊天室之使用Socket实现传递对象
2023-02-07 15:28:52
![](https://img.aspxhome.com/file/2023/7/68557_0s.png)
Java实战入门之双色球彩票小游戏
2023-05-12 04:07:13
![](https://img.aspxhome.com/file/2023/6/63486_0s.png)
SpringBoot集成阿里云OSS图片上传
2021-08-15 21:01:55
![](https://img.aspxhome.com/file/2023/9/66979_0s.jpg)
Spring Cloud Gateway去掉url前缀
2023-06-05 00:54:38
Spring boot中@Conditional和spring boot的自动配置实例详解
2023-06-20 09:36:14
![](https://img.aspxhome.com/file/2023/9/61539_0s.png)