java实现红包要多少钱_JAVA实现简单抢红包算法(模拟真实抢红包)
闲来无事,最近项目需求要写出用户登录首页来发现金红包,没有限额。我就自己稍微计算了一下如果有限额该怎么写。觉得这样与微信红包差不多。等项目需求完成以后。正好来博客贴一下我自己写的拆红包算法。个人觉得这个算法比较模拟现实抢红包规则。废话少说。先贴代码;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class TestMain {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
List moneys = math(BigDecimal.valueOf(10), 6);
if (moneys != null) {
BigDecimal b = new BigDecimal(0);
for (BigDecimal bigDecimal : moneys) {
System.out.print(bigDecimal + "元 ");
b = b.add(bigDecimal);
}
System.out.print(" 总额:" + b+"元 ");
System.out.println();
}
}
}
/**
* 计算每人获得红包金额;最小每人0.01元
* @param mmm 红包总额
* @param number 人数
* @return
*/
public static List math(BigDecimal mmm, int number) {
if (mmm.doubleValue() < number * 0.01) {
return null;
}
Random random = new Random();
// 金钱,按分计算 10块等于 1000分
int money = mmm.multiply(BigDecimal.valueOf(100)).intValue();
// 随机数总额
double count = 0;
// 每人获得随机点数
double[] arrRandom = new double[number];
// 每人获得钱数
List arrMoney = new ArrayList(number);
// 循环人数 随机点
for (int i = 0; i < arrRandom.length; i++) {
int r = random.nextInt((number) * 99) + 1;
count += r;
arrRandom[i] = r;
}
// 计算每人拆红包获得金额
int c = 0;
for (int i = 0; i < arrRandom.length; i++) {
// 每人获得随机数相加 计算每人占百分比
Double x = new Double(arrRandom[i] / count);
// 每人通过百分比获得金额
int m = (int) Math.floor(x * money);
// 如果获得 0 金额,则设置最小值 1分钱
if (m == 0) {
m = 1;
}
// 计算获得总额
c += m;
// 如果不是最后一个人则正常计算
if (i < arrRandom.length - 1) {
arrMoney.add(new BigDecimal(m).divide(new BigDecimal(100)));
} else {
// 如果是最后一个人,则把剩余的钱数给最后一个人
arrMoney.add(new BigDecimal(money - c + m).divide(new BigDecimal(100)));
}
}
// 随机打乱每人获得金额
Collections.shuffle(arrMoney);
return arrMoney;
}
}
这套代码的思考逻辑:
1.首先我们要根据人数来把红包金额拆成N份,但是因为平均值问题。如果每人分得太平均会显得可玩性不大。
2.其次,我们该怎么分?来保证红包可玩性较强。其实我觉得这些都不重要。毕竟红包只看运气。我玩微信红包运气不好20元3个人分我也抽到过0.01元。并发量也会很大。所以我这套代码只是简单的把所有人都会出一个随机数(随机数范围是 人数*100),把这些人的随机数加在一起然后来算每人随机数的百分比。按这个百分比来瓜分红包。
以上所述是小编给大家介绍的JAVA实现简单抢红包算法(模拟真实抢红包),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
本文标题: JAVA实现简单抢红包算法(模拟真实抢红包)
本文地址: http://www.cppcns.com/ruanjian/java/173682.html
java实现红包要多少钱_JAVA实现简单抢红包算法(模拟真实抢红包)相关推荐
- java实现红包要多少钱_Java实现发红包功能
Java发红包案例,供大家参考,具体内容如下 首先我们需要分析这个代码的架构是什么,需要什么类组成等. 我们需要建立4个类,这4个类分别是用户类.群主类.成员类,运行类: 因为群主类和成员类都有共同的 ...
- java实现红包要多少钱_Java实现抢红包算法,附完整代码(公平版和手速版)
当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) 这是一种很合理很公平的抢红包算法了,绝对不会让你拼 ...
- java实现红包要多少钱_java实现微信红包分配算法
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 java 实现微信红包分配算法 2017/03/25 0 红包算法分析有人认为,抢红包的额度是从 0.01 到剩余平均值 *N(N 是一个系数,决 ...
- java实现红包要多少钱_Java实现发红包模拟
packagecom.cmk;import javax.swing.*;import java.awt.*;importjava.awt.event.KeyAdapter;importjava.awt ...
- java实现红包要多少钱_Java实现抢红包功能
本文实例为大家分享了Java实现抢红包功能的具体代码,供大家参考,具体内容如下 关键思想: 1.抢红包涉及多人并发操作,需要做好同步保证多线程运行结果正确. 2.由于同时在线人数大,从性能方面考虑,玩 ...
- java实现红包要多少钱_java实现微信红包分配算法(示例代码)
红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然 ...
- java实现红包要多少钱_java实现红包的分配算法
个人推测,微信红包在发出的时候已经分配好金额.比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额. 而不是在领取的时候才计算的.下面贴出实现 ...
- java实现红包要多少钱_2020情人节红包数字寓意 214情人节给女朋友发多少钱红包合适...
阅读本文前,请您先点击上面的蓝色字体"心情湾",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 214情人节给女朋友 ...
- java开发一年多少钱_Java
Java工程师10万年薪需要几年经验? 我国目前对软件人才的需求已达20万,并且以每年20%左右的速度增长.在未来5年内,合格软件人才的需求将远大于供给.2008年,我国软件人才的缺口已达42.5万, ...
最新文章
- python pandas DataFrame 排序
- 如何理解写文档这件事情 ?
- Java文件流输入输出
- 分享一个牛逼的 Java 开源后台管理系统,不要造轮子了!
- 在GridView中使用Cache
- SpringMVC的数据响应-页面跳转-返回字符串形式(应用)
- 获取用户列表为空_数据结构和算法(Golang实现)(15)常见数据结构-列表
- 大话设计模式-策略模式与简单工厂模式
- pytorch损失函数(正在更新中,勿点进来看)
- aspen二元体系共沸组分_应用Aspen Plus分离共沸物
- 【sklearn第十七讲】特征选择
- linkedlist 最难题 Insert into a Cyclic Sorted List
- select2复制下拉框clone
- 计算机设置了分组用户怎么切换,怎么弄微信小号-不单止换小号,另外这些微信小技巧也一定让你“相见恨晚”...
- 工厂模式概念及其使用场景
- 编写一个 spootboot 程序,有二个方法,一个问早上好,一个说再见
- 计算机win7卡顿如何解决方法,电脑win7系统出现卡顿怎么处理
- 天池比赛:工业蒸汽量预测
- linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...
- 一个简单的SpringBoot项目 demo
热门文章
- 分享一些web前端工程师常用且实用的网站
- BOGNER博格纳正式宣布杨洋为品牌代言人
- 为了搞明白统计套利,从两组序列之间的关系说起
- 小微企业信用评级方法
- OpenCV 进行图像融合拼接
- 关于STM32WB55一些测评评价
- python程序员能做什么副业好_聊一聊程序猿该如何做副业
- Parameter ‘ew‘ not found. Available parameters are [wrapper, page, param1, param2]
- 航嘉电源的通病维修方法!!
- java字符乱码问题_怎么解决java中的字符乱码问题