java写的伪微信红包功能示例代码
作者:田小江 发布时间:2023-07-05 00:24:23
标签:java,微信,红包
性能优化点:
1.使用int不使用double。(单位用分不用元)也省去了还要用math.round四舍五入,把double类型数据只留小数点后前两位。
2.random() 方法用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0。所以,当每人只能分到1分钱时,不用生成随机数(随机数只能生成0分,不大于最小值,会死循环)。
import java.util.HashMap;
import java.util.Map;
public class WXTRedPackage {
public static void main(String[] args) {
WXTRedPackage wx = new WXTRedPackage();
// 红包钱数(以分为单位),个数
wx.WXMoney(1000, 50);
}
public void WXMoney(int sum, int num) {
// 创建一个hashmap,把分配出来的人和钱顺序打乱
Map<Integer, Integer> moneyMap = new HashMap();
System.out.println("共计" + sum / 100 + "元红包,分成" + num + "份。开始:");
int min = 0;
int balance = sum;
int money = 0;
for (int i = 0; i < num; i++) {
if ((double) sum / num == 1) {
moneyMap.put(i, 1);
} else {
// 最大可分配数目为剩下的人每人至少1分钱
int max = balance - (num - i - 1) * 1;
// 获取一个0-最大可分配数的随机数
money = (int) (Math.random() * max);
// 最后一个人全分配最后的余额
if (i == num - 1) {
moneyMap.put(i, balance);
break;
} else {
// 分配的金额要超过0份,小于最大可分配数,不符合要求则把人数减一重新循环一次
if (money > min && money < max) {
balance -= money;
moneyMap.put(i, money);
} else {
i = i - 1;
}
}
}
}
for (Integer key : moneyMap.keySet()) {
System.out.println("第" + (key + 1) + "人获取红包"
+ (double) moneyMap.get(key) / 100 + "元!");
}
}
}
来源:https://www.imooc.com/article/24038?block_id=tuijian_wz


猜你喜欢
- Redis 3.X版本引入了集群的新特性,为了保证所开发系统的高可用性项目组决定引用Redis的集群特性。对于Redis数据访问的支持,目前
- 在源码的阅读过程中,可以了解别人实现某个功能的涉及思路,看看他们是怎么想,怎么做的。接下来,我们看看这篇Java源码解析之object的详细
- 本文实例分析了Android编程中activity的完整生命周期。分享给大家供大家参考,具体如下:android中 activity有自己的
- 前言学过定时任务,但是我忘了,忘得一干二净,害怕,一直听别人说:你写一个定时任务就好了。写个定时任务让他去爬取就行了。我不会,所以现在得补回
- 本文实例讲述了C++实现的O(n)复杂度内查找第K大数算法。分享给大家供大家参考,具体如下:题目:是在一组数组(数组元素为整数,可正可负可为
- 可以用抽象工厂模式来造车。车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类:public
- 前言:现在一般的Android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新。该项目实现的就是
- 需求:android存储字符串数据简单的有SharePerfence不过只能存储89kb最多的数据(好像),超过这个数据如果不方便网络存储,
- 概述在 NAudio 中, 常用类型有 WaveIn, WaveOut, WaveStream, WaveFileWriter, WaveF
- 一. SpringBoot集成liquibase项目集成liquibase作用对数据库表字段进行版本控制项目初始化部署时初始化数据库表和数据
- C#之继承继承、封装和多态是面向对象编程的重要特性。其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。派生类隐式获得基类的除构
- JPA设置表名和实体名,表字段与实体字段的对应首先 你的jpaProperties配置项中要有<prop key="hibe
- 研发背景公司安全部目前针对内部系统的网络访问日志的安全审计,大部分都是T+1时效,每日当天,启动Python编写的定时任务,完成昨日的日志审
- 一、准备工作小编今天以 QQ邮箱 进行演示操作。想要使用代码操作邮箱发送邮件,需要在邮箱设置中申请开通 POP3/SMTP 服务。接下来跟着
- 1、满二叉树、完全二叉树、平衡二叉树、红黑树、二叉搜索树的区别?参考文章:树、二叉树(完全二叉树、满二叉树)概念图解① 满二叉树高度为&nb
- #include<iostream>using namespace std;//非递归求解所有的子集void fun(int a
- 今天有个项目需要使用redis,并且有使用脚本的需求。但是因为之前没有写过,所以还有一点点不熟悉,今天记录一下。原因:原子操作,redis会
- 一、SpringBoot中的main方法注入service在springboot中使用main方法常规无法注入service,因为以后也可能
- 本文实例讲述了Android中Market的Loading效果实现方法。分享给大家供大家参考。具体如下:在Android中,要实现Loadi
- 这次我们来说一下hibernate的层次设计,层次设计也就是实体之间的继承关系的设计。 也许这样比较抽象,我们直接看例子。&nbs