Java基于ArrayList实现群主发红包功能
作者:勤快的懒羊羊 发布时间:2022-04-06 20:34:09
标签:Java,ArrayList,红包,功能
群主发普通红包,某群有多名成员,群主给成员发普通红包,普通红包的规则:
群主的一笔金额,从群主余额中扣除,平均分成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


猜你喜欢
- 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。例如:
- 1.通过看logcat下的日志2.通过adb命令3.通过写代码获取3.1写一个工具类打印系统时间3.2 在Application启动的时候打
- 初级技巧 - 乐观锁乐观锁适合这样的场景:读不会冲突,写会冲突。同时读的频率远大于写。以下面的代码为例,悲观锁的实现:public Obje
- 一、场景描述接《Java设计模式(一)工厂模式》工厂模式有一缺点,就是破坏了类的封闭性原则。例如,如果需要增加Word文件的数据采集,此时按
- 摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用
- 开发环境为android4.1.Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.
- 引看懂这张图,方法调用方法,栈开新栈,递归尾结束要回到main栈,必须一级一级返回,每一次返回都是调用整个方法,调用完成栈被释放,直至回到栈
- 我就废话不多说了,大家还是直接看代码吧~public class GatewayContext { public static final
- 虽然闭包主要是函数式编程的玩意儿,而C#的最主要特征是面向对象,但是利用委托或lambda表达式,C#也可以写出具有函数式编程风味的代码。同
- 相信大家在小的时候都玩过拼图游戏,现如今,手机普及,能在手机上玩的游戏越来越多,于是乎,重温小时候,编写这个简易拼图游戏,而且也能进一步加深
- 前言:项目中数据分页是一个很常见的需求,目前大部分项目都会使用pagehelper进行分页,那么在使用的过程中是否考虑如下问题?一、基本集成
- 安卓的三种本地的典型数据存储方式SharedPreferences以文件格式保存在本地存储中SQL数据库IDE : Android Stud
- 在 Eclipse 里新建好工程后,默认会有一个assets目录,在 Eclipse 中直接将准备好的 SQLite 数据库复制到该目录中,
- 为什么要使用克隆? 想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了,Java语言中克隆针对的是类的实例。如何实现对象
- 像360卫士的波浪球进度的效果,一般最常用的方法就是画线的方式,先绘sin线或贝塞尔曲线,然后从左到右绘制竖线,然后再裁剪圆区域。今天我这用
- 一、图示spring再简化:SpringBoot-jar:内嵌tomacat;微服务架构!二、springboot是什么spring是一个为
- 一.BASIC认证概述在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,
- 一、前言在mybatis官网中,有插件一说 mybatis plugins 如果同时有多个插件,那么他们的执行顺序是怎样的?二、准备工作、代
- 实现文档在线预览的方式除了上篇文章《文档在线预览(一)通过将txt、word、pdf转成图片实现在线预览功能》说的将文档转成图片的实现方式外
- 本篇文章,我们来讲解springcloud的服务注册和发现组件,上一章节我们讲解了如何搭建springcloud的多模块项目,已经新建了sp