超简单的JAVA 权重分配,支持多个权重,完美实现五五开,等任何比列.

xiaoxiao2021-03-01  23

/** * 根据总订单数和分配的订单数动态调整下次分配比例 */ public class WeightTest { public static void main(String[] args) { int number = 1000;//假设1000个订单数 Double[] weight = new Double[]{1D,2D,3D,4D,5D}; //已分配订单数 Integer[] count = new Integer[weight.length]; for(int i= 0 ;i <number;i++) { //当前权重 Double[] current = new Double[weight.length]; for(int w=0;w<weight.length;w++) { current[w] = weight[w]/(count[w]==null?1:count[w]); } int index = 0; Double currentMax = current[0]; for(int d=1; d<current.length;d++) { //考虑全等的情况 Boolean isTrue = true; while (isTrue) { Set set = new HashSet(); for(Double c : current) { set.add(c); } if(set.size()==1) {//代表全等 for(int e=0; e<current.length;e++) { current[e] = current[e]*Math.random(); } }else { isTrue = false; } } //比较所有的数,寻找出下标最大的哪一位 if(currentMax<current[d]) { currentMax=current[d]; index =d; } } count[index]=count[index]==null?1:count[index]+1; } for(Integer i :count) { System.err.println(i); }

 

 

------------------------------

1:2 开

1:2:3:4:5 输出如下

全部都是5 5 开的情况

 

说不上算法,只是解决了自己再业务逻辑中的一些问题,如果有错误,请指正,希望大神不要喷~

转载请注明原文地址: https://www.6miu.com/read-3200038.html

最新回复(0)