本文代码仓库地址: gitee码云CSDN笔记仓库地址
发红包小练习【Main.java】
package cn.xiaoyin98.Demo11;
import java.util.ArrayList;
/**
* @author 小印丶
* @date 2021-01-20 22:31
* <p>
* 小练习:群主给群员发红包,红包金额平均分,如果有余数,给最后一个包里面,群主和群员都有各自的余额
* <p>
* 思路:
* 1、有 父类【用户:User】、子类【群主:Lord、成员:Member】
* 2、父类:成员变量【名称:name、钱:money】
* 3、子类:群主有独有的发红包成员方法【outRedEnvelopes】,成员有独有的收红包方法【inRedEnvelopes】
*/
public class Main {
public static void main(String[] args) {
// 群主和成员的类都写完后,现在进行相关的操作
// 创建一个群主【名称:狗群主、钱包金额:666】
MxyLord lord = new MxyLord("狗群主", 666);
// 创建几个成员
MxyMember member01 = new MxyMember("小印01", 100);
MxyMember member02 = new MxyMember("小印02", 200);
MxyMember member03 = new MxyMember("小印03", 300);
MxyMember member04 = new MxyMember("小印04", 400);
MxyMember member05 = new MxyMember("小印05", 500);
// 群主发红包钱我们先看看各自的家底
lord.show();
member01.show();
member02.show();
member03.show();
member04.show();
member05.show();
System.out.println("------------------分割线------------------");
// 群主开始发红包啦【radist 是群主发的红包】
ArrayList<Integer> radist = lord.outRedEnvelopes(66,5);
// 成员纷纷开始抢红包了
member01.inRedEnvelopes(radist);
member02.inRedEnvelopes(radist);
member03.inRedEnvelopes(radist);
member04.inRedEnvelopes(radist);
member05.inRedEnvelopes(radist);
// 抢完一轮后看看各自家底
lord.show();
member01.show();
member02.show();
member03.show();
member04.show();
member05.show();
}
}
父类:用户类【MxyUser.java】
package cn.xiaoyin98.Demo11;
/**
* @author 小印丶
* @date 2021-01-20 22:40
*
* 父类:用户类
*/
public class MxyUser {
String name;
int money;
public MxyUser() {
}
public MxyUser(String name, int money) {
// 用户名称
this.name = name;
// 用户自身金额
this.money = money;
}
/**
* 显示用户剩余金额
*/
public void show(){
System.out.println("姓名:" + this.name + ",钱包金额:" + this.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;
}
}
群主类【MxyLord.java】
package cn.xiaoyin98.Demo11;
// 使用集合不要忘记导包
import java.util.ArrayList;
/**
* @author 小印丶
* @date 2021-01-20 22:44
* <p>
* 群主类:继承 父类【用户类】,并且有自己独有的发红包的方法
*/
public class MxyLord extends MxyUser {
public MxyLord() {
}
public MxyLord(String name, int money) {
// 调用父类的构造方法,进行成员变量的赋值【确定群主的名称和余额】
super(name, money);
}
/**
* 群主的发红包方法
* @param totalMoney 发红包的总金额
* @param count 这个红包分几个包进行发送
* @return 红包集合 ArrayList
*/
public ArrayList<Integer> outRedEnvelopes(int totalMoney, int count) {
// 首先需要需要创建一个数组进行存放红包
ArrayList<Integer> redList = new ArrayList<Integer>();
// 这里我们需要进行判断,群主发的红包他钱包的余额是否充足
if (totalMoney > super.getMoney()){
System.out.println("狗群主钱包金额不足了");
return redList;
}
// 存放红包的容器有了,群主余额充足,下一步就是平分红包【单个红包 = 总金额 / 红包数】
int average = totalMoney / count;
// 通过上面的平分,可能还有余数生下来的金额没有分,那么简单粗暴的给最后一个包里面,这里我们就取剩下来的余数
int remainder = totalMoney % count;
// 已经都平分好了,那么就开始塞红包
// 首先是前面平均的红包,最后一个红包单独塞
for (int i = 0; i < count - 1; i++) {
redList.add(i, average);
}
// 这里进行设置后一个红包的金额
int lastRad = average + remainder;
// 把最后一个红包放进去
redList.add(lastRad);
// 群主钱包余额计算【现有 = 原有 - 发红包金额】
super.setMoney(super.getMoney() - totalMoney);
// 红包都塞好之后就是发出去,让成员去抢了
return redList;
}
}
成员类【MxyMember.java】
package cn.xiaoyin98.Demo11;
import java.util.ArrayList;
import java.util.Random;
/**
* @author 小印丶
* @date 2021-01-20 23:19
* <p>
* 成员类:继承 父类【用户类】,并且有自己独有的收红包的方法
*/
public class MxyMember extends MxyUser {
public MxyMember() {
}
public MxyMember(String name, int money) {
// 调用父类的构造方法,进行成员变量的赋值【确定成员的名称和余额】
super(name, money);
}
/**
* 成员收红包的方法
* @param radList 群主发的红包
*/
public void inRedEnvelopes(ArrayList<Integer> radList) {
// 随机获取一个红包,就是随机获取集合的一个索引值【随机数的范围是集合的0-长度】
int index = new Random().nextInt(radList.size());
// 根据索引值,从集合中取出这个红包,并且删除【我们就直接删除,删除的方法有返回删除的值】
int deleteValue = radList.remove(index);
// 已经领完了,我们就进行更新自己的钱包【现有 = 原有 + 领取金额】
super.setMoney(super.getMoney() + deleteValue);
}
}
一点点笔记,以便以后翻阅。