java模拟微信抢红包的实例代码
作者:NatYang 发布时间:2021-12-08 19:51:21
标签:java,红包
java简单模拟微信抢红包功能,本例发100元红包,有10个人抢,为了尽可能的公平,每个人的红包金额都要随机(保证结果的不确定性,本例抢红包的次序与红包金额匹配也随机),就是不能出现部分红包偏大部分偏小的情况,在区间0~100上随机生成9个节点,加0和100共11个节点按从小到大排序,各节点之间的差值就是红包金额,保证了红包金额之和等于100。
public static void main(String[] args)
{
// 发100元红包,10人抢
// TODO Auto-generated method stub
// 发红包总金额100元
double S = 100;
// 0-100之间9个节点,加首尾11个点赋值给数组a
double[] a = new double[11];
// 第一个数是0
a[0] = 0;
// 最后一个数是100
a[a.length - 1] = S;
// 生成9个数随机节点并保留两位小数
for (int m = 1; m < a.length - 1; m++)
{
a[m] = Double.valueOf(String.format("%.2f", S * Math.random()));
}
// 冒泡排序对9个点进行排序
for (int i = 1; i < a.length - 2; i++)
{
for (int j = 1; j < a.length - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
double temp;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
//红包金额赋值给数组aa
double[] aa = new double[a.length - 1];
// 后一项减前一项的差值为红包金额
for (int n = 0; n < a.length - 1; n++)
{
double mon = a[n + 1] - a[n];
//用自己的算法实现四舍五入保留两位小数
int n1 = (int) (mon * 1000);
int c = n1 % 10;
if (c > 4)
mon = (double) ((n1 + 10) / 10) / 100;
else
mon = (double) (n1 / 10) / 100;
aa[n] = mon;
}
//列表打乱数组aa中的顺序,实现抢红包的次序与红包金额匹配随机
List<Double> list = new ArrayList<>();
for(int i = 0; i < aa.length; i++)
{
list.add(aa[i]);
}
Collections.shuffle(list);
for(double i:list)
System.out.println(i);
}
来源:http://www.jianshu.com/p/40d70963dd89
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 概述日常工作中,我们经常会有发送 HTTP 网络请求的需求,概括下我们常见的发送 HTTP 请求的需求内容:可以发送基本的 GET/POST
- 前言相信很多Java开发都遇到过一个面试题:Resource和Autowired的区别是什么?这个问题的答案相信基本都清楚,但是这两者在Sp
- 近日,开发者头条上分享了一篇“小米java第二轮面经”,有很多的java程序员表示非常有兴趣。下面就和各位分享小米java第二轮面经:0、谈
- 问题原因Springboot get请求是参数过长抛出异常:Request header is too large 的问题错误描述java.
- 前言近期一直在忙项目,我也是打工仔。不多说,我们开始玩一玩seata。什么都不说,我们按照惯例,先上一个图(图里不规范的使用请忽略):简单一
- 前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分。1. 数据库建表并映射Model首先我们在数据库中新建一张表,然后使用
- 使用maven的profile功能,我们可以实现多环境配置文件的动态切换,可参考我的上一篇博客。但随着SpringBoot项目越来越火,越来
- MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。spri
- 快速排序过程没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”!光听这个名字是不是就觉得很高端呢。假设我们现在对“52 39 67
- 当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免
- 前言在 Java 中,跳转的实现方式有两种:请求转发和请求重定向,但二者是完全不同的,所以我们今天就来盘它。请求转发和请求重定向主要区别,包
- 在idea中将创建的java web项目部署到Tomcat中采用的工具idea 2018.3.6 Tomcat71.先创建第一个新项目sec
- 环境与版本本文出来之前的一篇文章中的hibernate的相关lib 外Java事务管理之Hibernate还需要加入spring的lib 包
- 本文实例为大家分享了java制作简单验证码的具体代码,供大家参考,具体内容如下在这里我们需要用到java的画笔工具,所以我们需要导入以下包i
- 本文实例为大家分享了JavaMail实现带附件的邮件发送的具体代码,供大家参考,具体内容如下发送纯文本的邮件package com.haiw
- 最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一下关于贴上关于实现服务端(Spring Boot)
- 部署到webapps目录启动本文使用的Spring版本为Spring6,SpringBoot版本为3,JDK为17,可能会和之前有细微不同,
- Web Services 可以将应用程序转换为网络应用程序。通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项
- Spring Boot产生环形注入***************************APPLICATION FAILED TO STAR
- 本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下package gyb.exam;import java.aw