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

  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. springboot配置字符编码

    这边主要有两种方式 方式一.使用传统的Spring提供的字符编码过滤器(Filter的方式) 因为,字符编码过滤器在框架中已经有了,所以我们不需要自己写了.直接进行配置类的实现: @Configura ...

  2. Python中ansible的使用

    #!/usr/bin/env python # -*- coding: utf8 -*- # @Author: huangmanyao from ansible import constants fr ...

  3. 题解 洛谷 P3332

    题目描述 权值线段树套线段树板子题 首先观察题目,判断为二维偏序问题 操作1为区间修改,所以一定是外部线段树维护权值,内部线段树维护所在区间,否则时间复杂度爆炸qwq 为方便查找,哈希时我采用哈希每个 ...

  4. MMD日文乱码解决

    记录一下自己在学习MMD遇到的问题. 日文乱码是很常见的,因为很多MMD资源是日本的. 1.解压乱码 我以好压为例,其他解压软件也是可以通过设置解决的 设置

  5. kafka-clients 1.0 内部响应接口文档

    AddOffsetsToTxnResponse version:0 name type defaultValue docString throttle_time_ms INT32 0 Duration ...

  6. LNK2005 连接错误解决办法 2009-10-30 12:13

    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@ ...

  7. 【异常检测】孤立森林(Isolation Forest)算法简介

    简介 工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏.如果进行人工二次标记,成本会 ...

  8. 手把手教你写VueRouter

    Vue-Router提供了俩个组件 `router-link` `router-view`, 提供了俩个原型上的属性`$route` `$router` ,我现在跟着源码来把它实现一下 开始 先看平时 ...

  9. jqgrid 获取选中用户的数据插入

    因为查询出的表和被插入的表不是在同一个数据库,所以先从前台jqgrid表格中获取到数据后,再插入表中. 实现: 获取到jqgrid选中 的每行数据之后,发ajax请求把数据以json格式传入后台,后台 ...

  10. 使用正则表达式限制<kbd>QLineEdit</kbd>不能输入大于某个整数

    使用正则表达式限制QLineEdit不能输入大于某个整数,即:使用正则表达式,匹配不大于某个整数 举例:匹配不大于4567 * 原理分析: 匹配不大于4567这个数,所以第一个想到的是只要小于4567 ...