发红包案例(RedPacketFrame简介)

发红包案例:

案例目录结构如下(red包为第三方包,需要的话可以到网上自行下载或私信我邮箱即可):
在这里插入图片描述

// 1.这里将借用发红包的框架:RedPacketFrame(图形界面化),OpenMode处理红包分发逻辑的接口(里面只有一个抽象方法,需要自己实现),实现普通红包和手气红包的分发:
// 框架中提供相关参数:totalMoney(红包总金额)、totalCount(要分发的总份数)、divide(int totalMoney, int totalCount)处理方法、ArrayList<Integer>(将处理后的数据放到数组列表中)
/* 2.注意事项: 
普通红包(平均分发):totalMoney / totalCount,平均分发会有除不尽的情况,此时推荐将余数加到最后一份上。
手气红包(随机):手气红包处理逻辑可以自己设计,这里推荐一种常用的设计思想:最少一分钱(java底层已经将钱转换为分计算了),最多不超过平均数的2倍,余额越发越少。
RedPacketFrame为一个抽象类,不能直接new对象,需要通过实现类来使用此抽象类。
setOwnerName("字符串"):此方法是RedPacketFrame框架提供我们修改发红包人名字的。
setOpenWay(OpenWay):设置分发(打开)红包的方式,里面传入OpenWay类型的数据。
*/
import red.OpenMode;
// 3.导入RedPacketFrame抽象类:
import red.RedPacketFrame;//特别提醒:导入一个自定义的包时,需要在包中的java文件中声明包,其格式:package 包中java文件所在的位置,如:package red;
public class Start{public static void main(String[] args){// 5.创建一个红包:SonRedPackClass redpack = new SonRedPackClass("测试发红包案例");//这里传入字符串用来设置红包的标题redpack.setOwnerName("苦海");//设置发红包人姓名// 7.创建平均分发红包对象:OpenMode avgredpack = new AvgRedPack();// OpenMode randomredpack = new RandomRedPack();//经测试,随机分发红包处理方法可以实现redpack.setOpenWay(avgredpack);//设置打开方式为平均分发红包,当着这里可以传入随机分发红包的OpenMode数据};
};
import red.RedPacketFrame;//导入RedPacketFrame用来被继承
// 4.创建一个SonRedPackcCass子类(实现类)来继承RedPacketFrame:
public class SonRedPackClass extends RedPacketFrame{public SonRedPackClass(String title){//title为图形界面的标题super(title);//通过super调用父级的构造方法}
};
// 6.实现OpenMode接口中的divide方法,这里使用平均分发的思想覆盖重写 divide方法:
import java.util.ArrayList;
import red.OpenMode;
public class AvgRedPack implements OpenMode{@Overridepublic ArrayList<Integer> divide(final int totalMoney,final int totalCount){//因为在整个分发过程中总份数和总钱数不变,这里可以使用final进行修饰,当然不写也可以ArrayList<Integer> list = new ArrayList<>();//创建一个数组,用来存放平均分发的每一份数据int avg = totalMoney / totalCount;//平均数int mod = totalMoney % totalCount;//余数// 将平均数通过循环放入到数组中,余数推荐分发给最后一个或第一个,这里将余数分发给最后一个了,如:for(int i = 0; i < totalCount;i++){if(i == totalCount-1){list.add(avg + mod);}else{list.add(avg);}};return list;};
}
// 8.再实现一下OpenMode接口中随机分发红包的方法divide:
import java.util.ArrayList;
import red.OpenMode;
import java.util.Random;
public class RandomRedPack implements OpenMode{@Overridepublic ArrayList<Integer> divide(final int totalMoney,final int totalCount){//因为在整个分发过程中总份数和总钱数不变,这里可以使用final进行修饰,当然不写也可以ArrayList<Integer> list = new ArrayList<>();//创建一个数组,用来存放随机分发的每一份数据//定义两个变量:剩余金额、剩余分发次数,如:int leftMoney = totalMoney;//初始化为总金额,每分发一次,金额减少一次int leftCount = totalCount;//初始化为总次数,每分发一次,次数减少一次// 通过循环产生随机数,并将产生的随机数放到数字中:for(int i = 0; i < totalCount;i++){//前面的人得到随机红包,最后一个人将剩余金额都给他即可,因此这里循环总人数-1Random random = new Random();//创建一个随机数生成器int money = random.nextInt(leftMoney / leftCount *2) + 1;//生成随机金额,最少应分到1分钱,所以因是1+一个随机数;if(i == totalCount-1){list.add(leftMoney);}else{list.add(money);};leftMoney -= money;leftCount--;};return list;};
}

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

easy connect 获取服务端配置信息失败_如何统计 Mysql 服务器状态信息?

最近在看《高性能的 Mysql》一书&#xff0c;下面是关于如何学习统计 Mysql 服务器状态的学习总结&#xff0c;主要是学习使用 SHOW STATUS&#xff0c;SHOW ENGINE INNODB STATUS&#xff0c;SHOW PROCESSLIST&#xff0c;SHOW PROFILE 四个命令。命令一&#xff1a;SHOW STAT…

实现线段切割法_切割晶圆及玻璃产品的现代技术与设备

作者&#xff1a;韩卓申科VS1,2&#xff0c;伊凡诺夫VI3&#xff0c;吕鸿图2,4&#xff0c;纳乌莫夫A S2,4&#xff0c;王薇媛4摘要&#xff1a;由于需以各种非金属半导体材料晶圆制造使用价值低之微电子产品&#xff0c;对其加工高精度及品质改善的要求更为严苛&#xff0c;因…

学python最重要的是_Python学习,要选哪个版本?

纵观各大编程语言在 2017 年的发展情况&#xff0c;我们会发现涌现出诸如 Go、Swift 这类后起之秀&#xff0c;而其中最为耀眼的当属 Python。之所以 Python 如此受捧&#xff0c;不仅仅是人工智能、数字科学领域的兴起&#xff0c;而且与其自身的特性必不可分&#xff0c;正应…

cefsharp 加载网页慢_网站访问慢的排查方案(史上最详细)

说实话&#xff0c;比起网站打不开&#xff0c;网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了&#xff0c;一般用户根本无从下手&#xff01;任他千头万绪的问题&#xff0c;从以下三个方面入手&#xff0c;也能轻松破解访问慢的大难题 &#xff1a;响应时间、执行时间…

typescript语法高亮插件_vscode常用插件

插件介绍HTML Snippets > 初级H5代码片段及提示HTML CSS Support > 初级H5代码片段及提示Debugger for Chrome > 让 vscode 映射 chrome 的 debug功能&#xff0c;静态页面都可以用 vscode 来打断点调试jQuery Code Snippets > jquery 重度患者必须品&#xff0c;废…

cfree运行程序错误_C/C++程序调试和内存检测

程序出现错误很正常&#xff0c;一个优秀的程序员必须学会调试&#xff0c;发现错误并改正。减少程序错误最有效的方法是&#xff1a;在敲代码之前&#xff0c;多花点时间思考&#xff0c;如何构造程序&#xff0c;数据结构和算法&#xff0c;尽量把细节提前写下来&#xff0c;…

session的removeattribute移除一个不存在的属性会怎么用_公认峡谷机制最完美,对线几乎无解,夏侯惇高端局为何火不起来?...

Hello各位亲爱的小伙伴们&#xff0c;大家好&#xff0c;我是沐辰。在王者荣耀中始终有这么一个说法&#xff1a;“夏侯惇是王者峡谷机制最完美的英雄”&#xff0c;当然这个可不是沐辰胡编乱造&#xff0c;而是策划在数年前就曾公开发表过的看法。从机制上来&#xff0c;夏侯惇…

python图标的演变_python day 22 CSS拾遗之箭头,目录,图标

lanxing4. CSS拾遗之箭头画法.up { border-top: 30px solid green; border-right: 30px solid transparent; border-bottom: 30px solid transparent; border-left: 30px solid transparent; display: inline-block; } .down { border-top: 30px solid transparent; border-rig…

PHP中生成UUID

一、什么是UUID 简单的说UUID就是一串全球唯一的(16进制)数字串。 UUID的全拼为“Universally Unique Identifier”&#xff0c;可以译为“通用唯一识别码”。UUID由开源软件基金会 (Open Software Foundation, OSF) 定义&#xff0c;是分布式计算环境 (Distributed Computing …

岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...

工作多年&#xff0c;被面试过很多次&#xff0c;也面试过很多人&#xff0c;其中有一次印象最深刻&#xff0c;这次我不是主面试官&#xff0c;经理要面试一个候选人&#xff0c;他就拉上了我&#xff0c;作为陪衬&#xff0c;用经理的话说就是撑撑场面&#xff0c; 所以问题的…

java中Collection集合、Iterator迭代器接口、for each循环遍历集合或对象

Collection集合&#xff1a; 概念&#xff1a;集合是java中提供一种存储多个数据的容器;数组也是存储数据的容器&#xff0c;集合和数组的区别就是集合的长度可以改变&#xff0c;而数组的长度不可以改变&#xff1b;集合可以存储多种类型的对象数据&#xff0c;而数组只能存储…

工业镜头选型计算公式_变压器分接开关选型指南

如何选择变压器适用的分接开关型号&#xff1f;选型中又有哪些值得注意的事项呢&#xff1f;小编特别整理提炼了分接开关选型指南&#xff0c;让我们一起来看一下。分接开关的产品型号示例如下&#xff1a;型号中的各项参数和规格可通过以下步骤计算确定&#xff1a;1、确定调压…

icmp端口_pingtunnel搭建icmp隧道

说明pingtunnel可以将udp、tcp、sock5流量伪装成icmp传输&#xff0c;地址&#xff1a;https://github.com/esrrhs/pingtunnel/&#xff0c;详细说明和用法可参考官方说明。示例图客户端运行在攻击机&#xff0c;服务端运行在受害机。情况如下&#xff1a;通过pingtunnel搭建一…

node中使用短信验证功能(阿里云为例)

一、选择短信平台 短信平台有很多&#xff0c;这里我选择阿里云&#xff0c;详细步骤如下&#xff1a; 进入短信控制台&#xff0c;对要发送的短信格式进行配置&#xff0c;如果没有签名&#xff0c;需要申请签名后操作&#xff08;注意&#xff1a;需要自己已有阿里云账号且实…

如何画圆柱_什么是最速降线?如何来验证一下呢?这里用SolidWorks来试一试

一个仅受重力的物体&#xff0c;从一个点出发&#xff0c;沿着一条没有摩擦的斜坡滚动到另外一个点。肯定有一个斜坡使物体运动的时间最短。这个斜坡所在的曲线就是“最速降线”。关于这个最速降线是怎么计算出来&#xff0c;我并不知道&#xff0c;但是他有一个结论&#xff0…

根据用户id查询菜单列表(菜单权限问题)

根据用户id查询菜单列表&#xff08;菜单权限问题&#xff09;&#xff1a; 最高级用户菜单效果图&#xff1a; 较低级别用户菜单效果图&#xff1a; SQL语句分析图&#xff1a; 根据用户id查询对应菜单&#xff08;权限&#xff09;SQL语句&#xff1a; SELECT * FROM us…

pycharm中配置r语言_【R语言】R语言中的循环

编程中减少代码重复的两个工具&#xff0c;一是循环&#xff0c;一是函数。循环&#xff0c;用来处理对多个同类输入做相同事情&#xff08;即迭代&#xff09;&#xff0c;如对不同列做相同操作、对不同数据集做相同操作。R语言有三种方式实现循环&#xff1a;&#xff08;1&a…

钉钉api 获取 accesstoken_Thinkphp5.X异常接管后通过钉钉机器人推送通知

大多团队在生产环境下都会关闭app_debug&#xff0c;所以相对应的错误信息就不能实时查看到。以下分享一个目前团队项目正在用的生产环境下相关技术人员能第一时间获取通知的方法&#xff1a;先上效果图&#xff1a;以上通知是在钉钉中显示&#xff01;下面介绍开发步骤&#x…

js中将有层级关系的一维数据转换为父子级关系的二维数据、菜单权限三级层级数据实现(树形结构数据)

很久没有发文了&#xff0c;今天发点不一样的&#xff0c;如下&#xff1a; <script>// 一维数据&#xff1a;let arrData[{ r_id: 1, role_name: 开发商, n_id: 1, txt: 主页 },{ r_id: 1, role_name: 开发商, n_id: 2, txt: 项目 },{ r_id: 1, role_name: 开发商, n_id…

修改器内置脚本编写_Node.js 中实践 Redis Lua 脚本

对别人的意见要表示尊重。千万别说&#xff1a;"你错了。"——卡耐基Lua 是一种轻量小巧的脚本语言&#xff0c;用标准 C 语言编写并以源代码形式开放&#xff0c;其设计目的是为了嵌入应用程序中&#xff0c;从而为应用程序提供灵活的扩展和定制功能。由于 Lua 语言…