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

执行结果:

原文地址:https://www.cnblogs.com/wurengen/p/10851003.html

时间: 2024-10-08 13:59:05

发红包1.0的相关文章

PHP实现发红包程序

我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第二个红包=10-第一个红包金额: N=3 第三个 红包1=0.01至9.99之间的某个随机数 红包2=0.01至(10-红包1-0.01)的某个随机数 红包3=10-红包1-红包2 -- 于是我们得到一个规律,在分配当前红包金额时,先预留剩余红白所需最少金额,然后在0.01至总金额-预留金额间取随机

朋友圈红包图片0元看-不谢

还在打开关闭100次看完图片的每一个角落? 还在忐忑怒发红包,再一次一万个草泥马被骗? 别急!跟着下面一步一来,拨云开雾,0元查看图片SO EASY!!! 电脑.手机在一个WiFi 电脑搜索Fiddler,下载安装 打开Fiddler,如下设置一次: 快捷键 Win + r,输入cmd,回车,再输入ipconfig,如下: 打开手机设置,进入到Wi-fi,点感叹号,如下 服务器输入你刚才记下的IP地址,端口写8888. 设置完了,来查看吧!!! 电脑上回到Fiddler,直接上图吧! 会了木有!

js 发红包

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <script> window.onload = function (){ var oBtn = $('btn'); var num = $('nu

php发红包

?/** * 发红包函数实现 * @param float $total    红包金额 * @param int $num        红包个数 * @return  返回数组 */function luckymoney($total,$num){    $min=0.01;//每个人最少能收到0.01元    $arr[]=array() ;    for ($i=0;$i<$num-1;$i++)    {        $safe_total=($total-($num-$i)*$mi

使用PHP编写发红包程序

使用PHP编写发红包程序 http://www.jb51.net/article/69815.htm 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22 微信发红包是最近非常火的一件事情,大家或多或少的都发过或者收到过红包,那么下面来看一个我们在生活中常碰到的一个php实现微信红包的程序算法,希望这个程序对各位做微信开的朋友会带来帮助. 使用PHP发红包,当我们输入红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,每个红

51nod1625 夹克爷发红包(贪心+dfs)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1625 在公司年会上,做为互联网巨头51nod掌门人的夹克老爷当然不会放过任何发红包的机会. 现场有n排m列观众,夹克老爷会为每一名观众送出普通现金红包,每个红包内金额随机. 接下来,夹克老爷又送出最多k组高级红包,每组高级红包会同时给一排或一列的人派发 ,每个高级红包的金额皆为x. 派发高级红包时,普通红包将会强制收回.同时,每个人只能得到一个高级红包.(好小

用Python编写简单的发红包程序和计算器原理

用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成分为单位 ret = random.sample(range(1,money),num-1) #在最低钱数1分与总钱数之间生成人数减1个数作为数轴的节点 ret.sort() #对列表进行排序 ret.insert(0,0) ret.append(money) for i in range(len(

微信发红包 PHP 实现

最近做生日营销,需要微信发红包,特此从网上找了一篇教程 首先你的有个服务号,并且开通了微信支付,我在这就不说怎么去申请和开通了,我是看了微信官方文档后,想看官方文档的朋友可以到下面这个链接 https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1 class WxRedPack { //配置参数信息 const SHANGHUHAO = "***********";//商户号 const PART

随机发红包

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