闲来无事,最近项目需求要写出用户登录首页来发现金红包,没有限额。我就自己稍微计算了一下如果有限额该怎么写。觉得这样与微信红包差不多。等项目需求完成以后。正好来博客贴一下我自己写的拆红包算法。个人觉得这个算法比较模拟现实抢红包规则。废话少说。先贴代码;

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实现简单抢红包算法(模拟真实抢红包)相关推荐

  1. java实现红包要多少钱_Java实现发红包功能

    Java发红包案例,供大家参考,具体内容如下 首先我们需要分析这个代码的架构是什么,需要什么类组成等. 我们需要建立4个类,这4个类分别是用户类.群主类.成员类,运行类: 因为群主类和成员类都有共同的 ...

  2. java实现红包要多少钱_Java实现抢红包算法,附完整代码(公平版和手速版)

    当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) 这是一种很合理很公平的抢红包算法了,绝对不会让你拼 ...

  3. java实现红包要多少钱_java实现微信红包分配算法

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 java 实现微信红包分配算法 2017/03/25 0 红包算法分析有人认为,抢红包的额度是从 0.01 到剩余平均值 *N(N 是一个系数,决 ...

  4. java实现红包要多少钱_Java实现发红包模拟

    packagecom.cmk;import javax.swing.*;import java.awt.*;importjava.awt.event.KeyAdapter;importjava.awt ...

  5. java实现红包要多少钱_Java实现抢红包功能

    本文实例为大家分享了Java实现抢红包功能的具体代码,供大家参考,具体内容如下 关键思想: 1.抢红包涉及多人并发操作,需要做好同步保证多线程运行结果正确. 2.由于同时在线人数大,从性能方面考虑,玩 ...

  6. java实现红包要多少钱_java实现微信红包分配算法(示例代码)

    红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然 ...

  7. java实现红包要多少钱_java实现红包的分配算法

    个人推测,微信红包在发出的时候已经分配好金额.比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额. 而不是在领取的时候才计算的.下面贴出实现 ...

  8. java实现红包要多少钱_2020情人节红包数字寓意 214情人节给女朋友发多少钱红包合适...

    阅读本文前,请您先点击上面的蓝色字体"心情湾",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 214情人节给女朋友 ...

  9. java开发一年多少钱_Java

    Java工程师10万年薪需要几年经验? 我国目前对软件人才的需求已达20万,并且以每年20%左右的速度增长.在未来5年内,合格软件人才的需求将远大于供给.2008年,我国软件人才的缺口已达42.5万, ...

最新文章

  1. python pandas DataFrame 排序
  2. 如何理解写文档这件事情 ?
  3. Java文件流输入输出
  4. 分享一个牛逼的 Java 开源后台管理系统,不要造轮子了!
  5. 在GridView中使用Cache
  6. SpringMVC的数据响应-页面跳转-返回字符串形式(应用)
  7. 获取用户列表为空_数据结构和算法(Golang实现)(15)常见数据结构-列表
  8. 大话设计模式-策略模式与简单工厂模式
  9. pytorch损失函数(正在更新中,勿点进来看)
  10. aspen二元体系共沸组分_应用Aspen Plus分离共沸物
  11. 【sklearn第十七讲】特征选择
  12. linkedlist 最难题 Insert into a Cyclic Sorted List
  13. select2复制下拉框clone
  14. 计算机设置了分组用户怎么切换,怎么弄微信小号-不单止换小号,另外这些微信小技巧也一定让你“相见恨晚”...
  15. 工厂模式概念及其使用场景
  16. 编写一个 spootboot 程序,有二个方法,一个问早上好,一个说再见
  17. 计算机win7卡顿如何解决方法,电脑win7系统出现卡顿怎么处理
  18. 天池比赛:工业蒸汽量预测
  19. linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...
  20. 一个简单的SpringBoot项目 demo

热门文章

  1. 分享一些web前端工程师常用且实用的网站
  2. BOGNER博格纳正式宣布杨洋为品牌代言人
  3. 为了搞明白统计套利,从两组序列之间的关系说起
  4. 小微企业信用评级方法
  5. OpenCV 进行图像融合拼接
  6. 关于STM32WB55一些测评评价
  7. python程序员能做什么副业好_聊一聊程序猿该如何做副业
  8. Parameter ‘ew‘ not found. Available parameters are [wrapper, page, param1, param2]
  9. 航嘉电源的通病维修方法!!
  10. java字符乱码问题_怎么解决java中的字符乱码问题