欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

用java实现模拟微信红包算法

程序员文章站 2022-04-03 15:59:13
文章目录实现过程1.2.实现过程1.代码如下(示例):import java.math.BigDecimal;import java.util.ArrayList;public class GenRedPacket {static ArrayList list = new ArrayList();;public static BigDecimal bianLiJia(ArrayList

文章目录


实现过程

1.

代码如下(示例):

import java.math.BigDecimal;
import java.util.ArrayList;

public class GenRedPacket {
	static ArrayList<BigDecimal> list = new ArrayList<BigDecimal>();;

	public static BigDecimal bianLiJia(ArrayList<BigDecimal> list) {
		BigDecimal b = new BigDecimal("0");
		for (int i = 0; i < list.size(); i++) {
			b = b.add(list.get(i));
		}
		return b;
	}

	public static void bianLiJian(BigDecimal b1, BigDecimal b2) {
		if (bianLiJia(list).doubleValue() < b1.doubleValue()) {
			BigDecimal b3 = bianLiJia(list);
			BigDecimal b4 = b1.subtract(b3);
			int i = 0;
			list.set(i = (int) (Math.random() * (b2.intValue())), list.get(i).add(b4));
		} else if (bianLiJia(list).doubleValue() > b1.doubleValue()) {
			BigDecimal b3 = bianLiJia(list);
			BigDecimal b4 = b3.subtract(b1).divide(b2, 2, BigDecimal.ROUND_FLOOR);
			for (int i = 0; i < list.size(); i++) {
				if (list.get(i).doubleValue() > b4.doubleValue()) {
					list.set(i, list.get(i).subtract(b4));
				}
			}
		}
		if (bianLiJia(list).doubleValue() > b1.doubleValue()) {
			BigDecimal b3 = bianLiJia(list);
			BigDecimal b4 = b3.subtract(b1);
			for (int i = 0; i < list.size(); i++) {
				if (list.get(i).doubleValue() > b4.doubleValue()) {
					list.set(i, list.get(i).subtract(b4));
				}
			}
			bianLiJian(b1, b2);
		}
	}

	public static ArrayList<BigDecimal> genRedPacket(String total, int count) {

		BigDecimal b1 = new BigDecimal(total);
		BigDecimal b2 = new BigDecimal(count);
		for (int i = 0; i < count; i++) {
			String s = String.valueOf(((int) (Math.random() * (Integer.parseInt(total) + 1)))
					+ ((int) (Math.random() * 100) + 1) / 100.0);
			BigDecimal b3 = new BigDecimal(s);
			list.add(b3);
		}
		bianLiJian(b1, b2);
		return list;
	}
	
	public void fhb(String total, int count) {
		genRedPacket(total,count);
		int i = 1;
		for(BigDecimal b:list) {
			System.out.println("第"+i+"个红包:"+b+"元");
			i++;
		}
	}
}

2.

代码如下(示例):

import java.text.ParseException;
import java.util.Scanner;

public class Test {

	public static void main(String[] args) throws ParseException {
		Scanner scanner = new Scanner(System.in);
		GenRedPacket dp = new GenRedPacket();
		System.out.print("请输入要发红包金额与个数:");
		String s1 = scanner.next();
		int a1 = scanner.nextInt();
		dp.fhb(s1, a1);
	}
}

用java实现模拟微信红包算法


本文地址:https://blog.csdn.net/skaihzx/article/details/109957605

相关标签: 算法 java