功能案例-----发红包\抢红包简单案例

该博客介绍了一个简单的Java程序,用于模拟群主在群中发红包以及成员抢红包的过程。通过定义用户类、群主类和成员类,实现了红包的发送和接收功能。群主类具有发红包的方法,成员类具有收红包的方法。测试结果显示了红包金额的随机分配和成员接收红包后的余额变化。这是一个基础的Java编程示例,涉及面向对象设计和随机数生成。
摘要由CSDN通过智能技术生成

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();
    }
}

测试结果:
在这里插入图片描述
需要源代码的可以留下邮箱,我看到会第一时间分享给大家,欢迎大家一起指出问题,一起讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值