java 设计一个固定总币数的红包,然后按人数分配红包
时间: 2024-03-27 10:40:33 浏览: 16
好的,我来为您解答。
以下是一种可能的实现:
```java
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RedPacket {
private BigDecimal totalAmount; // 总金额
private int totalPeople; // 总人数
public RedPacket(BigDecimal totalAmount, int totalPeople) {
this.totalAmount = totalAmount;
this.totalPeople = totalPeople;
}
public List<BigDecimal> divide() {
List<BigDecimal> result = new ArrayList<>();
BigDecimal leftAmount = totalAmount;
int leftPeople = totalPeople;
Random random = new Random();
for (int i = 0; i < totalPeople - 1; i++) {
BigDecimal amount = leftAmount.multiply(new BigDecimal(random.nextDouble())).setScale(2, BigDecimal.ROUND_HALF_UP);
result.add(amount);
leftAmount = leftAmount.subtract(amount);
leftPeople--;
}
result.add(leftAmount);
for (int i = 0; i < leftPeople - 1; i++) {
result.add(BigDecimal.ZERO);
}
return result;
}
public static void main(String[] args) {
RedPacket redPacket = new RedPacket(new BigDecimal("100.00"), 10);
List<BigDecimal> result = redPacket.divide();
for (BigDecimal amount : result) {
System.out.println(amount);
}
}
}
```
这个类包含了总金额和总人数两个属性,以及一个 `divide` 方法来分配红包。在 `divide` 方法中,我们首先用一个 `Random` 对象生成每个人的红包金额,然后计算剩余金额和人数,将剩余金额分配给最后一个人,剩余人数的红包金额设置为 0。
在 `main` 方法中,我们创建了一个总金额为 100 元,总人数为 10 人的红包,并输出了分配结果。
希望这个实现能够满足您的需求。如果您有任何疑问或建议,欢迎随时提出。