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


猜你喜欢
- 接口隔离原则(ISP)定义:使用多个专门的接口比使用单一的总接口要好。即不要把鸡蛋都放到一个篮子里。好处:比较灵活、方便,不想实现的或不用实
- 什么是JPA一种规范,并非ORM框架,也就是ORM上统一的规范spring-boot-starter-data-jpa 
- 本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下摄像机镜头跟随鼠标移动,并限制上下左右的移
- 下面对Java反射的基础知识进行说明和总结:首先定义一个MyBase类,其中有私有字段,也有公有字段。同时也有公有方法和私有方法。MyBas
- 0. 困扰很久的问题Android控件的宽和高保持比例,这是从我接触Android以来,一直不断会遇到的需求。以前,要么就是在代码里直接设置
- 前言任何使用过基于 Java 的企业级后端应用的软件开发者都会遇到过这种低劣、奇怪的报错,这些报错来自于用户或是测试工程师: java.la
- 站点IP访问频率限制 针对单个站点using System;using System.Collections.Generic;u
- Java的位操作符用来操作整数基本数据类型中的单个“比特”(bit),即代进制位。而我们知道比特就是0和1,那么,位操作就是对这些数据进行基
- 从大学就开始做C#这块,也做C#几年了,最近又从ios转回.Net,继续做C#,之前也没有写博客的习惯,写博客也是从我做ios的时候开始的,
- Android的PopupWindow是个很有用的widget,利用它可以实现悬浮窗体的效果,比如实现一个悬浮的菜单,最常见的应用就是在视频
- 本文实例为大家分享了闪耀字体效果的具体代码,供大家参考,具体内容如下import android.content.Context;impor
- 提示:这里咱们要说的常量池,常量池就是咱们面试中所说的常量池,谈谈你对常量池的认识?面试官一问咱们就懵逼了,你要记得你脑子中有一张图!!!
- 由于for循环可以通过控制循环变量的初始值和循环结束条件来改变遍历的区间,所以在排序或者遍历的时候,利用for循环就比较简单,以下是本人学习
- 1、导入资源2、JSP代码<div class="page-container">  
- 前言Android Studio是Google开发的一款面向Android开发者的IDE,支持Windows、Mac、Linux等操作系统,
- 1. JSCH简介JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可
- 由于考虑到数据库的安全性,不被轻易SQL注入,执行查询语句时,一般不使用直接拼接的语句,而是使用参数传递的方法。然后在使用参数传递的方法中时
- 网络应用模式主要有:主机/终端模式:集中计算,集中管理;客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理;浏
- 为了提高用户体验,我们肯定希望该Dialog能更加炫酷,让用户看着更舒服。那如何做呢,当然是我们自己定义一个ProgressDialog了。
- springboot Jpa通用接口,公共方法de 简单使用 pom文件加入jpa这是我的例子使用的依赖。jpa必须当