Java 小练习【发红包】

这是一个Java程序,模拟群主给群成员发红包的场景。程序包括用户类(MxyUser)、群主类(MxyLord)和成员类(MxyMember)。群主通过outRedEnvelopes方法平均分配红包,成员通过inRedEnvelopes方法随机领取红包。程序展示了类的继承、成员方法的定义及使用,并实现了红包金额的平均分配和随机领取功能。
摘要由CSDN通过智能技术生成

本文代码仓库地址: 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);
    }
}

一点点笔记,以便以后翻阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小印丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值