java模拟微信拼手气红包算法
时间: 2023-11-15 13:12:41 浏览: 48
以下是Java实现微信拼手气红包算法的代码:
```java
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RedPacketUtil {
/**
* 拆分红包
*
* @param totalAmount 红包总金额(单位:元)
* @param totalPeople 红包总人数
* @return 拆分后的红包金额列表
*/
public static List<BigDecimal> splitRedPacket(BigDecimal totalAmount, int totalPeople) {
List<BigDecimal> amountList = new ArrayList<>();
Random random = new Random();
BigDecimal leftAmount = totalAmount;
int leftPeople = totalPeople;
for (int i = 0; i < totalPeople - 1; i++) {
// 随机生成一个红包金额,范围为:0.01元 ~ 剩余平均值的两倍
BigDecimal amount = BigDecimal.valueOf(random.nextDouble())
.multiply(leftAmount.divide(BigDecimal.valueOf(leftPeople), 2, BigDecimal.ROUND_HALF_UP))
.multiply(BigDecimal.valueOf(2))
.setScale(2, BigDecimal.ROUND_HALF_UP);
amountList.add(amount);
leftAmount = leftAmount.subtract(amount);
leftPeople--;
}
amountList.add(leftAmount);
return amountList;
}
/**
* 计算红包总金额
*
* @param amountList 红包金额列表
* @return 红包总金额(单位:元)
*/
public static BigDecimal getTotalAmount(List<BigDecimal> amountList) {
BigDecimal totalAmount = BigDecimal.ZERO;
for (BigDecimal amount : amountList) {
totalAmount = totalAmount.add(amount);
}
return totalAmount;
}
public static void main(String[] args) {
BigDecimal totalAmount = BigDecimal.valueOf(10); // 红包总金额为10元
int totalPeople = 5; // 拆分红包的总人数为5人
List<BigDecimal> amountList = splitRedPacket(totalAmount, totalPeople);
System.out.println(amountList);
}
}
```
使用示例:
```java
BigDecimal totalAmount = BigDecimal.valueOf(10); // 红包总金额为10元
int totalPeople = 5; // 拆分红包的总人数为5人
List<BigDecimal> amountList = RedPacketUtil.splitRedPacket(totalAmount, totalPeople); // 拆分红包
BigDecimal total = RedPacketUtil.getTotalAmount(amountList); // 计算红包总金额
```
实现思路:
1. 先定义一个红包总金额和拆分红包的总人数;
2. 初始化一个空的红包金额列表和一个Random对象;
3. 循环拆分红包,每次生成一个随机金额,范围为:0.01元 ~ 剩余平均值的两倍;
4. 将生成的红包金额添加到列表中,并更新剩余金额和剩余人数;
5. 最后将剩余金额作为最后一个红包金额添加到列表中;
6. 计算红包总金额,返回红包金额列表。
相关推荐
![php](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)