1.定义类–用户类/群主类/成员类
首先我们要定义相关的类,一般发红包,抢红包涉及到的对象可以简单的分为发红包的人,收红包的人两种,所以我们可以定义三个类,用户类/成员类/群主类。
第一步我们需要定义一个用户类来存储一些相关的属性。其次发红包,抢红包得流程肯定还需要一个群主来发红包,一个普通成员来收红包,所以我们在定义一个群主类来用于发红包,定义一个成员类来收红包;最后群主类和普通成员类在继承用户类。这样大体的流程思路就可以出来了。
用户类:
package com.redPacket;
//父类 也就是【用户】类
public class User {
private String name; //姓名
private int money; //余额,也就是当前账户的余额
public User() {
}
public User(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;
}
//为了方便,再定义一个show方法
//展示一下用户有多少钱
public void show(){
System.out.println("我叫"+name+", 我有"+money+"元");
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", money=" + money +
'}';
}
}
群主类:
成员类:
2.定义方法— 发红包方法:send() / 收红包方法:recieve()
群主类发红包逻辑:
在【群主类】中构造一个发红包(send)的方法,其中包含两个参数:
①总共发的钱数(int totalMoney) ②分成多少份儿(int count)
package com.redPacket;
import java.util.ArrayList;
// 【群主】的类
public class Manager extends User {
public Manager() {
}
public Manager(String name,int money){
super(name,money);
//调用父类的构造方法,可以将父类定义的name 和 money 拿过来
}
/**
* 发红包逻辑:
* 在【群主类】中构造一个发红包(send)的方法:
* 其中包含两个参数:①总共发的钱数(int totalMoney) ②分成多少份儿(int count)
*/
//在这里就要开始发红包了
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);
//发红包要平均拆成count份
//将红包钱数平均分配
int avg = totalMoney/count;
//余数,也就是甩下的零头
int mod = totalMoney % count;
//剩下的零头,包在最后一个红包当中
//下面把红包一个一个放到集合当中
for (int i =0;i <count-1;i++){
redList.add(avg);
}
//count - 1 :是循环次数少一次,最后一个红包的钱数单独处理
//最后一个红包:
int last = avg+mod;
redList.add(last);
return redList;
}
}
成员类收红包逻辑:
在【成员类】中构造一个收红包(receive)的方法,收完就放到我们自己创建的口袋(List)里就可以成功获取红包了!
package com.redPacket;
import java.util.ArrayList;
import java.util.Random;
//普通成员
public class Member extends User {
public Member() {
}
public Member(String name, int money) {
super(name, money);
}
/**
* 准备好,我们要收红包啦~
*/
public void recieve(ArrayList<Integer> list) {
//从多个红包当中随便抽取一个,给我自己
//随机获取一个list集合当中的索引编号
int index = new Random().nextInt(list.size());
//list.size用来控制集合范围,范围在0~size-1
//根据索引,从集合当中删除,并且得到被删除的红包,给我自己
//delete是被删除红包的钱数
Integer delete = list.remove(index);
//当前成员自己本来有多少钱
int money = super.getMoney();
//加法,并且重新设置回去
//用户本来的钱数+收到的红包=用户总钱数
super.setMoney(money + delete);
System.err.println("新年新气象,恭喜" + getName() + "抢到了" + delete + "元红包!");
}
}
3.结果测试:
文件目录结构:
测试类:
package com.redPacket;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
//name 为成员名子,money为当前钱包中的钱数(都可随意设置)
Manager manager = new Manager("群主李白", 100);
Member memberOne = new Member("程咬金", 10);
Member memberTwo = new Member("张无忌", 7);
Member memberThree = new Member("李元芳", 22);
ArrayList<Integer> redList = manager.send(20, 3);
//三个普通成员去收红包
memberOne.recieve(redList);
memberTwo.recieve(redList);
memberThree.recieve(redList);
manager.show();//100-20=80;群主剩余余额
//6,6,8,随机分给三个人
memberOne.show();
memberTwo.show();
memberThree.show();
}
}
测试结果:
需要源代码的可以留下邮箱,我看到会第一时间分享给大家,欢迎大家一起指出问题,一起讨论!