import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections;
/**
* @author 作者 :lishuai
* @version 创建时间:2019年6月26日 上午11:28:05 类说明
*/
public class RedEnvelope {
public static void main(String[] args) {
// 参数一:金额,参数二:人数
carveUp(1, 5);
}
public static void carveUp(int i, int amount) {
// 此集合是用来获得红包金额集合
List<BigDecimal> li = acquiremoney(i, amount);
int in = 1;
BigDecimal b = new BigDecimal(0);
for (BigDecimal bb : li) {
System.out.println("第" + in + "个人抢到的红包 : " + bb + "元");
b = b.add(bb);
in++;
}
int s = 1;
for (BigDecimal bb : li) {
if (bb == java.util.Collections.max(li)) {
System.out.println("第" + s + "个人是运气王金额为 : " + bb+"元");
}
s++;
}
System.out.println("红包总额为 : " + b + "元");
}
public static List<BigDecimal> acquiremoney(int i, int amount) {
BigDecimal b = new BigDecimal(i);
List<BigDecimal> list = new ArrayList<BigDecimal>();
if (b.doubleValue() < amount * 0.01) {
System.out.println("金额太少,不足以分到每个人,请重新输入金额");
return null;
} else {
Random ra = new Random();
// 金额换算成分
int m = b.multiply(BigDecimal.valueOf(100)).intValue();
Double[] d = new Double[amount];
int a = 0;
for (int s = 0; s < amount; s++) {
int r = ra.nextInt((amount * 99)) + 1;
a += r;
d[s] = r * 1.0;
}
int c = 0;
for (int s = 0; s < amount; s++) {
// 随机生成一个数
Double x = new Double(d[s] / a);
// 能够获得的钱数,单位是分
int ma = (int) Math.floor(x * m);
// 如果金额为0,设置最低金额为0.01
if (ma == 0) {
ma = 1;
}
c += ma;
if (s < amount - 1) {
list.add(new BigDecimal(ma).divide(new BigDecimal(100)));
} else {
list.add(new BigDecimal(m - c + ma).divide(new BigDecimal(100)));
}
}
}
// 用集合帮助类随意打乱集合的数据,提高抢红包的公平性
java.util.Collections.shuffle(list);
return list;
}
}