/**
* 根据总订单数和分配的订单数动态调整下次分配比例
*/
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 开的情况
说不上算法,只是解决了自己再业务逻辑中的一些问题,如果有错误,请指正,希望大神不要喷~