发红包1.0

Posted wurengen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发红包1.0相关的知识,希望对你有一定的参考价值。

需求:

群主发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则:
  • 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
  • 成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
定义用户类:
package demo04;

public class User {

    // 成员变量
    private String username; // 用户名
    private double leftMoney; // 余额

    // 构造方法
    public User() {
    }

    //全参数构造
    public User(String username, double leftMoney) {
        this.username = username;
        this.leftMoney = leftMoney;
    }

    // get/set方法
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public double getLeftMoney() {
        return leftMoney;
    }

    public void setLeftMoney(double leftMoney) {
        this.leftMoney = leftMoney;
    }

    // 展示信息的方法
    public void show() {
        System.out.println("用户名:" + username + " , 余额为:" + leftMoney + "元");
    }
}
定义群主类:
package demo04;

import java.util.ArrayList;

public class QunZhu extends User {
    // 添加构造方法
    public QunZhu() {
    }

    public QunZhu(String username, double leftMoney) {
        // 通过super 调用父类构造方法
        super(username, leftMoney);
    }

    /*
    群主发红包,就是把一个整数的金额,分层若干等份。
    1.获取群主余额,是否够发红包.
    不能则返回null,并提示.
    能则继续.
    2.修改群主余额.
    3.拆分红包.
    3.1.如果能整除,那么就平均分。
    3.2.如果不能整除,那么就把余数分给最后一份。
    */
    public ArrayList<Double> send(int money, int count) {
        // 获取群主余额
        double leftMoney = getLeftMoney();
        if (money > leftMoney) {
            return null;
        }
        // 修改群主余额的
        setLeftMoney(leftMoney - money);
        // 创建一个集合,保存等份金额
        ArrayList<Double> list = new ArrayList<>();
        // 扩大100倍,相当于折算成‘分‘为单位,避免小数运算损失精度的问题
        money = money * 100;
        // 每份的金额
        int m = money / count;
        // 不能整除的余数
        int l = money % count;
        // 无论是否整除,n‐1份,都是每份的等额金额
        for (int i = 0; i < count - 1; i++) {
            // 缩小100倍,折算成 ‘元‘
            list.add(m / 100.0);
        }
        // 判断是否整除
        if (l == 0) {
            // 能整除, 最后一份金额,与之前每份金额一致
            list.add(m / 100.0);
        } else {
            // 不能整除, 最后一份的金额,是之前每份金额+余数金额
            list.add((m + l) / 100.00);
        }
        // 返回集合
        return list;
    }

}
定义成员类:
package demo04;

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

public class Member extends User {
    public Member() {
    }

    public Member(String username, double leftMoney) {
        super(username, leftMoney);
    }

    // 打开红包,就是从集合中,随机取出一份,保存到自己的余额中
    public void openHongbao(ArrayList<Double> list) {
        // 创建Random对象
        Random r = new Random();
        // 随机生成一个角标
        int index = r.nextInt(list.size());
        // 移除一个金额

        Double money = list.remove(index);
        // 直接调用父类方法,设置到余额
        setLeftMoney(money);
    }
}

定义测试类

package demo04;

import java.util.Scanner;
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        // 创建一个群主对象
        QunZhu qz = new QunZhu("群主", 200);
        // 创建一个键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入金额:");
        int money = sc.nextInt();
        System.out.println("请输入个数:");
        int count = sc.nextInt();

        // 发送红包
        ArrayList<Double> sendList = qz.send(money, count);
        // 判断,如果余额不足
        if (sendList == null) {
            System.out.println(" 余额不足...");
            return;
        }
        // 创建三个成员
        Member m = new Member();
        Member m2 = new Member();
        Member m3 = new Member();
        // 打开红包
        m.openHongbao(sendList);
        m2.openHongbao(sendList);
        m3.openHongbao(sendList);
        // 展示信息
        qz.show();
        m.show();
        m2.show();
        m3.show();
    }
}

执行结果:

技术图片

 

以上是关于发红包1.0的主要内容,如果未能解决你的问题,请参考以下文章

Java发红包案例

Java发红包案例

零基础学Java—发红包案例(二十三)

java基础---22. 发红包案例

小程序发红包 公众号发红包开发中遇到的问题 大并发 频繁提现 刷接口

PHP微信发红包简明教程