软件编程
位置:首页>> 软件编程>> java编程>> Java基于ArrayList实现群主发红包功能

Java基于ArrayList实现群主发红包功能

作者:勤快的懒羊羊  发布时间:2022-04-06 20:34:09 

标签:Java,ArrayList,红包,功能

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

群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取;

成员领取红包后,保存到成员余额中。

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

Java基于ArrayList实现群主发红包功能

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


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实现群主发红包功能

来源:https://www.cnblogs.com/lwl80/p/13301188.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com