-
群主发普通红包
群主发普通红包。群主有多名成员,群主给成员发普通红包。普通红包的规则:
- 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
- 成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
如果群主发红包类型为:手气红包。
-
输出全场手气最佳的成员,并展示他所得红包金额
-
输出最后每位成员的余额
Pelple类
public class People {
private String name;//姓名
private double balance;//余额
public People() {
}
public People(String name, double balance) {
this.name = name;
this.balance = balance;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
群员类(GroupMembers 类)
//群员类
public class GroupMembers extends People {
public GroupMembers() {
}
public GroupMembers(String name, double balance) {
super(name, balance);
}
public void snatchRedEnvelope(double d){
setBalance(getBalance() + d);
System.out.println(getName() + "余额" + getBalance());
}
}
群主类(GroupOwner 类)
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
//群主类
public class GroupOwner extends People {
ArrayList<Double> list = new ArrayList<>();//群员抢到的钱数
public GroupOwner() {
}
public GroupOwner(String name, double balance) {
super(name, balance);
}
//发红包
public double giveRedEnvelopes(double money, int p) {
if (getBalance() >= money) {
setBalance(getBalance() - money);//群主余额
System.out.println("群主余额:" + getBalance());
double money2 = money / p;//每个群员得到的钱
return money / p;
} else {
System.out.println("余额不足");
return 0;
}
}
//输入钱数
public double importMoney() {
Scanner scanner = new Scanner(System.in);
double money = scanner.nextDouble();
if (money <= 0) {
System.out.println("请输入正确红包钱数:");
money = importMoney();
}
return money;
}
//输入人数
public int importPeople() {
Scanner scanner = new Scanner(System.in);
int p = scanner.nextInt();
if (p <= 0) {
System.out.println("请输入正确红包数(<=3):");
p = importPeople();
}
return p;
}
//发送手气红包
public ArrayList randomMoney() {
System.out.println("请输入红包钱数:");
double money = importMoney();//输入钱数
if (getBalance() >= money) {//判断余额是否足够
//足够输入红包个数
System.out.println("请输入红包个数(<=3):");
int p = importPeople();//输入人数
for (int i = 0; i < p; i++) {//把数组初始化值初始化为0.0
list.add(0.0);
}
int[] num = new int[p];//用于存储随机数
setBalance(getBalance() - money);//群主余额
System.out.println("群主余额:" + getBalance());//输出群主余额
Random random = new Random();
for (int i = 0; i < num.length; i++) {//遍历存储随机数的num数组
int i1 = random.nextInt(10) + 1;//获取随机数1~10
num[i] = i1;//把随机数存到数组
}
//把钱分成随机数组里面的随机数的和的份数,每个人得到随机的数对应的份数
int nums = 0;//随机数的和
for (int i = 0; i < num.length; i++) {
nums += num[i];
}
double money2 = money / nums;//每份钱多少
for (int i = 0; i < num.length; i++) {
list.set(i, money2 * num[i]);//把指定位置的0.0替换成 成员得到的钱数
}
return list;
} else {
System.out.println("余额不足");
ArrayList<Double> list1 = new ArrayList<>();
list1.add(0.0);//只存储一个0.0
return list1;//返回只有0.0的数组
}
}
public ArrayList<Double> getList() {
return list;
}
public void setList(ArrayList<Double> list) {
this.list = list;
}
}
测试类(Test )
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<GroupMembers> members = new ArrayList<>();//成员信息
GroupOwner owner = new GroupOwner("张三", 12000);
GroupMembers members1 = new GroupMembers("李四", 0);
GroupMembers members2 = new GroupMembers("王五", 0);
GroupMembers members3 = new GroupMembers("赵六", 0);
//把成员存到成员信息数组里面
members.add(members1);
members.add(members2);
members.add(members3);
//普通红包
/* double v = owner.giveRedEnvelopes(200, 3);
for (int i = 0; i < members.size(); i++) {
members.get(i).snatchRedEnvelope(v);//把钱存到每成员的余额中
}*/
//发送随机红包
//调用 发送手气红包的方法,得到存储钱的数组
ArrayList<Double> arrayList = owner.randomMoney();
if (!arrayList.get(0).equals(0.0)) {//判断arrayList的0的索引处是否为0.0
if (arrayList.size() <= members.size()) {//如果红包数少
for (int i = 0; i < arrayList.size(); i++) {//遍历随机红包数
System.out.println(members.get(i).getName() + "抢到:" + arrayList.get(i) + "元");
}
} else {//如果人数少
for (int i = 0; i < members.size(); i++) {//遍历人数数组数
System.out.println(members.get(i).getName() + "抢到:" + arrayList.get(i) + "元");
}
}
//判断arrayList数组(存钱的数组),找到最大值
double Max = 0.0;//最大值
int max = 0;//最大值的索引
for (int i = 0; i < arrayList.size(); i++) {
if (Max < arrayList.get(i)) {
Max = arrayList.get(i);
max = i;
}
}
//如果最大金额的索引大于人数,那最大的红包没有人抢到
if (max > members.size()){
System.out.println("最大额度为" + Max + "没有人抢到");
}else {
System.out.println("手气最佳的是" + members.get(max).getName() + " ,红包额度:" + Max);
}
//成员余额
for (int i = 0; i < members.size(); i++) {
members.get(i).snatchRedEnvelope(arrayList.get(i));//成员的余额加相应的钱 并输出余额
}
}
}
}