Java_收发红包简单实现

本文介绍了一个基于Java的群聊红包分配程序,通过群主发送平均红包给四位成员,利用继承、集合、方法调用等基础知识,实现了红包的发送与接收过程。

题目:

在一个群(有一个群主,四个群成员)中,群主给群成员发平均红包的简单实现。

分析:

1、群主和群成员都有姓名、余额,所以可以使用继承搞定。

2、发红包分析:

将发红包写成一个方法,方法名称为send,参数列表为总共发多少钱(int totalMoney)和发几个红包(int count),返回值为一个集合ArrayList<Integer>。

收红包的分析:

将收红包写成一个方法,方法名称为receive,参数列表为ArrayList<Integer>,返回值为void。

实现:

1、首先创建一个User父类,定义所需要的name、money,并且都设置为private(私有)。写一个方法,可以使群主、群成员调用而显示出各自的姓名、余额。写构造方法使群主成员创建时更便利。因为name、money都是私有的,所以还得写获取、设置姓名、余额的方法。具体代码为:

package demo15;

public class User {
    private String name;    //姓名
    private int money;      //余额

    //展示一下当前用户有多少钱
    public void show(){
        System.out.println("我叫:"+name+"我有多少钱:"+money);
    }

    public User() {
    }

    public User(String name, int money) {
        this.name = name;
        this.money = money;
    }
    //构造方法
    public String getName() {
        return name;
    }

    public int getMoney() {
        return money;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setMoney(int money) {
        this.money = money;
    }
    //设置、修改参数的方法
}

2、再创建一个群主类,第一写构造方法,使新建群主时更加便利,第二写一个发红包的方法,发红包的方法是这样实现的,首先,新建一个集合用来存储红包的金额,其次对群主金额进行判断,判断所发金额是否超过余额,然后对红包金额进行计算(如果遇到除不尽的情况、将余数加到最后一个红包中),然后加到红包集合中。具体代码为:

package demo15;

import java.util.ArrayList;
//群主的类
public class Manager extends User{   //继承User
    public Manager(){

    }

    public Manager(String name, int money) {
        super(name, money);
    }
    //构造方法
    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);
        }
        //最后一个红包,平均值钱+剩余的钱,然后加到余额中
        int last = avg + mod;
        redList.add(last);
        
        return  redList;
    }
}

3、创建一个成员类,第一写构造方法,使新建群成员时更加便利,第二写一个收红包的方法,收红包的方法是这样实现的,首先产生一个随机数,随机数的范围为集合长度,根据随机数将集合中对应的元素删除并且加到自己的余额中。具体代码为:

package demo15;

import java.util.ArrayList;
import java.util.Random;
//普通成员
public class Member extends User{    //继承User
    public Member() {
    }

    public Member(String name, int money) {
        super(name, money);
    }
    //构造方法
    public void receive(ArrayList<Integer> list){
        //从多个红包中随便抽取一个,给我自己
        //随机获取一个集合当中的索引编号
        int index = new Random().nextInt(list.size());
        //根据索引,从集合中删除,并且得到被删除红包,给我自己
        int delta = list.remove(index);
        //当前成员自己有多少钱
        int money = super.getMoney();
        //加法,并且重新设置回去
        super.setMoney(money + delta);
    }
}

4、创建一个发红包主体(main)的类,首先创建一个群主和四个成员,先看一下各自有多少钱,然后再调用send方法发送红包,调用receive方法收红包,最后再看一下各自有多少钱。具体代码为:

package demo15;

import java.util.ArrayList;     //调用java.util下集合的包

public class MainRedPacket {
    public static void main(String[] args) {        //程序入口
        Manager manager = new Manager("群主",100);   //new一个群主

        Member memberA = new Member("成员A",0);
        Member memberB = new Member("成员B",0);
        Member memberC = new Member("成员C",0);
        Member memberD = new Member("成员D",0);      //new四个成员

        manager.show();
        memberA.show();
        memberB.show();
        memberC.show();
        memberD.show();                            //调用show方法,查看各自姓名、余额

        System.out.println("==================================");
        //30块钱发4个红包
        ArrayList<Integer> redlist = manager.send(30,4);
        //四个成员收红包
        memberA.receive(redlist);
        memberB.receive(redlist);
        memberC.receive(redlist);
        memberD.receive(redlist);
        //将集合中随机抽取的数值删除,并且将这个数值加入到自己余额中。

        manager.show();
        memberA.show();
        memberB.show();
        memberC.show();
        memberD.show();                     //调用show方法,查看各自收红包后的姓名、余额


    }
}

5、运行后的结果:

我叫:群主我有多少钱:100
我叫:成员A我有多少钱:0
我叫:成员B我有多少钱:0
我叫:成员C我有多少钱:0
我叫:成员D我有多少钱:0
==================================
我叫:群主我有多少钱:70
我叫:成员A我有多少钱:9
我叫:成员B我有多少钱:7
我叫:成员C我有多少钱:7
我叫:成员D我有多少钱:7

总结:

本题用到了集合、方法调用、继承、构造方法等Java基本知识,比较综合,可供java初学者参考。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值