群主发普通红包和手气红包

  1. 群主发普通红包

    群主发普通红包。群主有多名成员,群主给成员发普通红包。普通红包的规则:

    1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
    2. 成员领取红包后,保存到成员余额中。

请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。

如果群主发红包类型为:手气红包。

  1. 输出全场手气最佳的成员,并展示他所得红包金额

  2. 输出最后每位成员的余额

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));//成员的余额加相应的钱 并输出余额
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值