java写的微信红包算法--田小江

写了一个微信红包的算法,记录一下,后续争取再优化一下,大佬们也帮忙看一下。

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 + "元!");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/third_/article/details/79587249