先来实现用户类
- 群主来发红包,成员抢红包,那么就涉及群主类和成员类。
- 群主和成员都有基本变量:称谓和余额
- 因此,可以把他们相同的地方整合起来,用户类就出现了。
- 用户类,我们设有基本变量name和money。无参构造函数全参构造函数以及getter and setter我们全都可以用快捷键搞定(前面文章有说到,不懂可以回去查阅哈)。为了很好地显示姓名和余额等情况,我们定义了一个成员方法void;
- 完整代码如下:
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+" 元");
}
}
下面是部分代码解释:
定义完用户类后,我们来定义群主类先
(1)首先,类名称那里要继承用户类(extends Users)
(2) 这样的话,我们就能在创建对象的时候直接输入余额和姓名就可以了
(3)定义全参和无参构造函数(还是用快捷键就能很快生成)
(4)在本类里面定义一个成员方法,主要用来发红包
-
按照顺序来,我们先要定义一个方法。方法名称取为send。返回值类型是ArrayList 。因为待会要把一个个红包放进来,就用集合来存储好了。参数列表里面要写明群主打算发多少钱红包,用 int totalmoney 来表示,int count 代表要发多少份
-
接下来要在send方法里面写内容了。这就要换位思考,假如,你现在就是群主,好,第一步骤,应该要先创建一个集合来放这些红包吧
-
接下来,发红包前先要记录一下自己目前有多少钱,这么记录呢,通过调用super.getMoney();是不是就知道了呢,然后我们将他用一个变量来记住,用leftmoney吧,表示余额
int leftmoney = super.getMoney();
-
接下来判断一下,如果我要发的红包(totalmoney)比我目前的余额(leftmoney)还多的话,显示余额不足,返回集合。
-
余额够的话,我们就可以来分啦,发红包后,余额是不是应该减去发出去的红包。再给money。记住,我们money是放在父类里面的,因此要super.setMoney()。就是将余额重定义的意思啦
super.setMoney(leftmoney - totalmoney);
6.做了大部分工作,终于要来发分配红包每个的金额了。因为这里发的是普通红包,因此要有一个平均数avg。(要发的总金额除去发红包个数),但是就算是平均分配,也可能出现20块钱给3个人除不尽的情况,这里我简单化。就是把除不尽部分的余数直接给最后一个位置。看下面代码:
int avg = totalmoney / count;
int mod = totalmoney % count;
7.接下来要把红包放在集合里面了,这里偷懒,直接循环遍历count。将一个avg放进去就好了,出去最后一个最值的特殊情况。最后一个位置钱比较多,加上了余数。最后返回集合
群主类完整代码如下:
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;
}
}
接下来,我们变角色,现在我们是群里面的普通成员啦。我们要来收红包。
-
第一步,定义类,还是继承用户类
-
第二步,还是定义无参构造函数和有参构造函数。
-
定义一个用来接收红包的方法,参数列表是集合(因为是从群主发的红包里面拿)。
-
因为随机从集合里面抽取,因此用到Random函数。抽取 的是数字,因此是Random.nextInt();有范围的,范围不能超过集合的大小,因此nextInt(list.size());//list就是接收方法参数列表里面的我们自己定义的。然后将这个位置用索引来命名
-
接下来要从该集合移走这个索引。也就是这个红包拉,我们用另一个变量存起来
int remove = list.remove(index);
-
拿到红包后,改名成员的余额发生了变化,要加上这个红包的钱,因此要重新定义余额
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());
}
}
接下来就建立主类。创建对象并使用啦
代码如下:
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随机抽取类)
刚开始觉得很复杂,学习了三遍把`
重复重复学,别被吓到
别人ok的,我也ok~