java实现发红包案例(一)

题目要求

编码实现群主发红包,群成员收红包的功能。

分析

1、群主发红包是一个特有方法
三要素:
返回值类型:arrayList
方法名称:send()
参数列表:红包总金额(totalMoney)、红包个数(total)

2、群成员收红包是一个特有方法
三要素:
返回值类型:void
方法名称:receive()
参数列表:arrayList

3、群主和群成员均有同样的属性:姓名、余额
定义一个user父类,让群主和群成员均可以继承其中的姓名和余额。

继承的概念
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的格式:

class 父类 {
}

class 子类 extends 父类 {
}

程序设计思路

1、创建一个父类User来储存Manager和Member的共有属性name和money;

class User {
	private string name;
	private int money;
}

class Manager extends User {
}
class Member extends User {
}

2、创建子类Manager和Member,除了继承父类User的属性外,还要分别自定义特有方法发红包send()和收红包receive();

判断群主的余额是否大于要发的红包金额,如果是则进行发红包操作;

public ArrayList<Integer> send(int totalMoney,int count){
    //创建一个集合储存若干个红包的金额
	//将金钱塞进红包用ArraryList来实现储存,在这操作之前需要将金钱均分为total等份
	//如有出现除不尽的情况可以将最后金钱余数(mod)放在最后一个红包内
	//使用for循环,通过redList.add(avg);完成塞红包的动作
	//返回redList
}

public void receive(ArrayList<Integer> list){
	//使用Random随机产生红包redList中的index坐标(取值范围为[0,redList.size()))
	//将该index对应的红包删除并赋值给群成员,更新redList.size(),for循环完成红包的分发
}

java 代码:

  • main函数
package test_1.demo05;

import java.util.ArrayList;

public class MainRedPacket {
    public static void main(String[] args) {

        Manager manager = new Manager("群主",520);
        Member one = new Member("群成员1",0);
        Member two = new Member("群成员2",10);
        Member three = new Member("群成员3",30);

        //显示未发红包前各成员的余额
        manager.show();
        one.show();
        two.show();
        three.show();
        System.out.println("==========");
        System.out.println("群主开始发红包");

        ArrayList<Integer> redList = manager.send(100,3);
        //普通群成员收红包
        one.receive(redList);
        two.receive(redList);
        three.receive(redList);
        manager.show();
        one.show();
        two.show();
        three.show();

        System.out.println("=======");

    }
}
  • User 父类
package test_1.demo05;

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

    public User() {
    }

    public User(String name, int money) {
        this.name = name;
        this.money = money;
    }
    //显示用户姓名和余额
    public void show(){
        System.out.println("我叫"+name+"余额"+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;
    }

}
  • Manger子类
package test_1.demo05;

import java.util.ArrayList;

public class Manager extends 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(leftMoney<totalMoney){
            System.out.println("余额不够,请充值再发红包,谢谢!");
            return redList;
        }
    //    else
     //       System.out.println("请输入红包金额和红包个数");

        //重新设置余额
        super.setMoney(leftMoney - totalMoney);

        //将红包金额拆分进total个红包内
        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;
    }
}
  • Member子类
package test_1.demo05;

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 receive(ArrayList<Integer> list){
        //从多个红包中抽取一个给自己
        //随机获取一个集合当中的索引编号
        int index = new Random().nextInt(list.size());
        //通过索引,从集合中将该红包给自己,然后删除该红包
        int delta = list.remove(index);
        int money = super.getMoney();
        super.setMoney(money+delta);
    }
}

运行结果

java微信抢红包怎么实现 java发红包案例_List

这个发红包demo是一个很基本的包含继承、构建方法和调用方法的demo,里面还有很多细节没有处理好,比如当群主发的红包金额比账户余额大时,该怎么处理,还有就是红包分发会有随机金额和平均金额两种模式,这里还么实现随机金额的功能,后面会更新博客进行代码的优化。

Memorial Day is 354 days
I miss you
xiaokeai