用Java写微信红包实现模拟微信发红包

继承关系如下

题目:

某软件有多名用户(User类),某群聊中有群主(Manager类)和多名普通成员(Member类),现群主大方给成员发红包。红包的规则:群主发一笔金额,从群主余额中扣除,红包分配方式有两种:1普通红包:平均分成n等份给成员。2随机红包:随机红包大小分配给成员。成员拿到红包后,保存到成员余额中,最后并显示每个人抢到了多少红包。

(温馨提示:本题金额可以仅考虑存储为整数的情况)

 思路如下:发红包一共2种方式。

第一种:平均红包,就是用红包 / 个数,如果除不尽就把余数金额给最后一个人。

第二种:随机红包,随机产生 n 个红包,并且确定每个人最少能分到一元钱。

用户类类代码:

package week9.t5;

public class User
{
    private String name;
    private int money;

    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;
    }
    public void toStr()
    {
        System.out.println("我叫:" + getName() + ",:余额:" + getMoney());

    }

}

群主类代码: 



import java.util.ArrayList;
import java.util.Random;

public class Manager extends User
{
    private String type;
    private int count;

    public Manager(String name, int money, String type, int count) {
        super(name, money);
        this.type = type;
        this.count = count;
    }

    public Manager(String name, int money, String type) {
        super(name, money);
        this.type = type;
    }
    public Manager(String name, int money){
        super(name, money);
    }

    public ArrayList<Integer> redMoney()
    {

        ArrayList<Integer> listRed = new ArrayList<>();
        if(type.equals("1"))
        {
            // 平分红包
            int x = getMoney() / count;
            int mod = getMoney() % count;
            for (int i = 0; i < count; i++)
            {
                System.out.println("第" +(i + 1)  + "红包是:" + x);
                if(i == count - 1)
                    listRed.add(x + mod);
                else
                    listRed.add(x);

            }
        }
        else// 按概率分红包
        {
            int c = count;
            Random r = new Random();
            int x = getMoney();
            for (int i = 0; i < count - 1; i++)
            {
                // 随机前3个红包
                int y = r.nextInt(x - c + 1) + 1;
                // 确保每个人最少都有一块钱
                c--;
                System.out.println("第" + (i + 1)  + "红包是:" + y);
                // 随机的每个红包添加到集合中
                listRed.add(y);
                // 减掉每次产生的随机红包
                x -= y;
            }
            // 最后一个红包就是x本身
            System.out.println("第" + (3 + 1)  + "红包是:" + x);
            listRed.add(x);
        }

        return listRed;

    }

}

普通成员类方法:

package week9.t5;

public class User
{
    private String name;
    private int money;

    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;
    }
    public void toStr()
    {
        System.out.println("我叫:" + getName() + ",:余额:" + getMoney());

    }

}

效果如下:

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值