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

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

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

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

 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中,然后以此传给每个群成员。最终运行结果如下:

Java使用ArrayList实现“群主发红包”功能的更多相关文章

  1. 为了讲明白继承和super、this关键字,群主发了20块钱群红包

    摘要:以群主发红包为例,带你深入了解继承和super.this关键字. 本文分享自华为云社区<群主发红包带你深入了解继承和super.this关键字>,作者:共饮一杯无 . 需求 群主发随 ...

  2. PHP实现微信发红包功能2

    <?php class wxPay { //配置参数信息 const SHANGHUHAO = "1430998xxx";//商户号 const PARTNERKEY = & ...

  3. Java 发红包

    使用Java实现发红包的功能. 结构: package redPocket User.java Manager.java Member.java Demo.java 思路: Manager和Membe ...

  4. C#开发微信门户及应用(38)--微信摇一摇红包功能

    摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...

  5. JAVA发红包案例

    模拟拼手气红包* 对于指定总金额以及红包个数,可以生成不同金额的红包,*,每个红包金额随机生成. * 分析这个题目:* 1.首先需要一个分发红包的方法.输入的参数是 总金额 以及 红包个数.* 按照这 ...

  6. 6.3.28微信需群主确认才可进群&发GIF动图功能内测开始了

    昨天下午有网友收到微信6.3.28新版内测邀请,不过这个内部体验目前貌似只对安卓手机开放,苹果的IOS系统还不支持,会提示“你当前使用的是非安卓设备,不建议下载安卓体验包,但你仍可邀请朋友尝鲜”.最新 ...

  7. java 集装箱 arraylist 用法

    1. ArrayList概述: ArrayList 是一个数组队列.相当于 动态数组. 与Java中的数组相比.它的容量能动态增长.它继承于AbstractList.实现了List, RandomAc ...

  8. Java集合 -- ArrayList集合及应用

    JAVA集合 对象数组 集合类之ArrayList 学生管理系统 斗地主案例 NO.one 对象数组 1.1 对象数组描述 A:基本类型的数组:存储的元素为基本类型 int[] arr={1,2,3, ...

  9. 解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList问题

    在spring + springmvc + mybatis框架中,我们配置接口对外返回json格式,但是报如下错误: 24-Oct-2017 17:42:23.495 严重 [http-nio-808 ...

随机推荐

  1. System.out.println()相关源码

    System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台. System:是 java.lang包中的一个final类.根据javadoc,“java.lang. ...

  2. 2020-04-06:为什么HashMap不一直使用红黑树?

    红黑树的阈值是8,当链表大于等于8时链表变成了红黑树结构,大大减少了查找的时间. 当长度低于6时会由红黑树转成链表,TreeNodes占用空间是普通Nodes的两倍,所以只有当bin包含足够多的节点时 ...

  3. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0

    本文转自 https://blog.csdn.net/WPwalter/article/details/82859449 使用 .NET Core 3.0 Desktop API Analyzer 分 ...

  4. 基于 Docker 搭建 Consul 多数据中心集群

    本文介绍了在 Windows 10 上基于 Docker 搭建 Consul 多数据中心集群的步骤,包括 Consul 镜像的拉取和容器的创建,每个数据中心对应服务端节点和客户节点的创建,节点之间相互 ...

  5. three.js 制作机房(上)

    three.js使用的人太少了,一个博文就几百个人看,之前发js基础哪怕是d3都会有几千的阅读量,看看以后考虑说一说d3了,哈哈.吐槽完毕回归正题.前几天郭先生看到网上有人开发了3D机房,正愁博客没什 ...

  6. List 集合的操作

    如果当前id存在集合里  去除当前id   如果不在集合里   去除集合最后一个结果Long videoId = 0l; // 当前 IDList<VideoZoneReturnBean> ...

  7. 《Windows程序设计(第5版 珍藏版)》配书光盘

    https://pan.baidu.com/s/1ro72qQja_xTbf-Ik8b06Ng

  8. SSRF 跨站请求伪造学习笔记

    参考文章: 了解SSRF,这一篇就足够了 SSRF 学习之路 SSRF绕过方法总结 Weblogic SSRF漏洞 What-是什么 SSRF(Server-Side Request Forgery) ...

  9. 群晖系统设置自动拍摄共享文件夹快照的教程【江东网 JDX86.COM】

    Snapshot Replication 是数据备份和还原的工具.企业需要数据保护以防止因意外删除.应用程序崩溃.数据损毁和病毒所造成的数据丢失. 1.在套件中心下载该套件 2.打开套件可以看到NAS ...

  10. oracle创建用户操作

    打开命令提示框输入以下内容 1.输入:sqlplus /nolog //进入oralce控制台2.输入:conn /as sysdba //以管理员权限登录3.输入:create user abc i ...