先来实现用户类

  1. 群主来发红包,成员抢红包,那么就涉及群主类和成员类。
  2. 群主和成员都有基本变量:称谓和余额
  3. 因此,可以把他们相同的地方整合起来,用户类就出现了。
  4. 用户类,我们设有基本变量name和money。无参构造函数全参构造函数以及getter and setter我们全都可以用快捷键搞定(前面文章有说到,不懂可以回去查阅哈)。为了很好地显示姓名和余额等情况,我们定义了一个成员方法void;
  5. 完整代码如下:
package it.cast.demo01.day0609;

public class Users {
    private String name;
    private int money;

    public Users() {
    }

    public Users(String name, int money) {
        this.name = name;
        this.money = money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
    public void show(){
        System.out.println("我是:"+name+"," +
                "我有:"+money+" 元");
    }
}

下面是部分代码解释:

java红包到期退回怎么实现 java自动抢红包代码_java红包到期退回怎么实现


java红包到期退回怎么实现 java自动抢红包代码_无参构造函数_02


java红包到期退回怎么实现 java自动抢红包代码_java_03

定义完用户类后,我们来定义群主类先

(1)首先,类名称那里要继承用户类(extends Users)

java红包到期退回怎么实现 java自动抢红包代码_java_04


(2) 这样的话,我们就能在创建对象的时候直接输入余额和姓名就可以了

(3)定义全参和无参构造函数(还是用快捷键就能很快生成)

java红包到期退回怎么实现 java自动抢红包代码_java红包到期退回怎么实现_05

(4)在本类里面定义一个成员方法,主要用来发红包

  1. 按照顺序来,我们先要定义一个方法。方法名称取为send。返回值类型是ArrayList 。因为待会要把一个个红包放进来,就用集合来存储好了。参数列表里面要写明群主打算发多少钱红包,用 int totalmoney 来表示,int count 代表要发多少份
  2. java红包到期退回怎么实现 java自动抢红包代码_java红包到期退回怎么实现_06

  3. 接下来要在send方法里面写内容了。这就要换位思考,假如,你现在就是群主,好,第一步骤,应该要先创建一个集合来放这些红包吧
  4. java红包到期退回怎么实现 java自动抢红包代码_无参构造函数_07

  5. 接下来,发红包前先要记录一下自己目前有多少钱,这么记录呢,通过调用super.getMoney();是不是就知道了呢,然后我们将他用一个变量来记住,用leftmoney吧,表示余额
    int leftmoney = super.getMoney();
  6. 接下来判断一下,如果我要发的红包(totalmoney)比我目前的余额(leftmoney)还多的话,显示余额不足,返回集合。
  7. java红包到期退回怎么实现 java自动抢红包代码_java红包到期退回怎么实现_08

  8. 余额够的话,我们就可以来分啦,发红包后,余额是不是应该减去发出去的红包。再给money。记住,我们money是放在父类里面的,因此要super.setMoney()。就是将余额重定义的意思啦
    super.setMoney(leftmoney - totalmoney);

6.做了大部分工作,终于要来发分配红包每个的金额了。因为这里发的是普通红包,因此要有一个平均数avg。(要发的总金额除去发红包个数),但是就算是平均分配,也可能出现20块钱给3个人除不尽的情况,这里我简单化。就是把除不尽部分的余数直接给最后一个位置。看下面代码:

int avg = totalmoney / count;
    int mod = totalmoney % count;

7.接下来要把红包放在集合里面了,这里偷懒,直接循环遍历count。将一个avg放进去就好了,出去最后一个最值的特殊情况。最后一个位置钱比较多,加上了余数。最后返回集合

java红包到期退回怎么实现 java自动抢红包代码_java_09


群主类完整代码如下:

package it.cast.demo01.day0609;

import java.util.ArrayList;

public class Manager extends Users {


    public Manager() {
    }

    public Manager(String name, int money) {
        super(name, money);
    }

    public ArrayList<Integer> send(int totalmoney, int count) {


        ArrayList<Integer> redlist = new ArrayList<>();

        int leftmoney = super.getMoney();
        if(totalmoney > leftmoney){
            System.out.println("余额不足");
            return redlist;
        }
        super.setMoney(leftmoney - totalmoney);
        int avg = totalmoney / count;
        int mod = totalmoney % count;
        for (int i = 0; i < count-1; i++) {
            redlist.add(avg);
        }
        redlist.add(avg + mod);
        return redlist;
    }
}

接下来,我们变角色,现在我们是群里面的普通成员啦。我们要来收红包。

  1. 第一步,定义类,还是继承用户类
  2. java红包到期退回怎么实现 java自动抢红包代码_无参构造函数_10

  3. 第二步,还是定义无参构造函数和有参构造函数。
  4. java红包到期退回怎么实现 java自动抢红包代码_java红包到期退回怎么实现_11

  5. 定义一个用来接收红包的方法,参数列表是集合(因为是从群主发的红包里面拿)。
  6. java红包到期退回怎么实现 java自动抢红包代码_无参构造函数_12

  7. 因为随机从集合里面抽取,因此用到Random函数。抽取 的是数字,因此是Random.nextInt();有范围的,范围不能超过集合的大小,因此nextInt(list.size());//list就是接收方法参数列表里面的我们自己定义的。然后将这个位置用索引来命名
  8. java红包到期退回怎么实现 java自动抢红包代码_java_13

  9. 接下来要从该集合移走这个索引。也就是这个红包拉,我们用另一个变量存起来
    int remove = list.remove(index);
  10. 拿到红包后,改名成员的余额发生了变化,要加上这个红包的钱,因此要重新定义余额

super.setMoney(remove + super.getMoney());

完整代码如下:

package it.cast.demo01.day0609;

import java.util.ArrayList;
import java.util.Random;

public class Members extends Users {


    public Members() {
    }

    public Members(String name, int money) {
        super(name, money);
    }
    public void receive(ArrayList<Integer> list) {

        int index = new Random().nextInt(list.size());

        int remove = list.remove(index);
        super.setMoney(remove + super.getMoney());
    }
}

接下来就建立主类。创建对象并使用啦

java红包到期退回怎么实现 java自动抢红包代码_java红包到期退回怎么实现_14


代码如下:

package it.cast.demo01.day0609;

import java.util.ArrayList;

public class MainRedPackets {
    public static void main(String[] args) {
        Members one = new Members("成员A",20);
        Members two = new Members("成员B",0);
        Members three = new Members("成员C",2);
        Manager manager = new Manager("群主",100);
        manager.show();
        one.show();
        two.show();
        three.show();
        System.out.println("==================");
        ArrayList<Integer> list = manager.send(20, 3);
        one.receive(list);
        two.receive(list);
        three.receive(list);
        manager.show();
        one.show();
        two.show();
        three.show();

    }

}

运行结果:

(你的结果和我的不一定一样哦,因为我用了Random随机抽取类)

java红包到期退回怎么实现 java自动抢红包代码_System_15


java红包到期退回怎么实现 java自动抢红包代码_System_16

刚开始觉得很复杂,学习了三遍把`
重复重复学,别被吓到
别人ok的,我也ok~