计算响应下标方法
总体思路:传入 N个int值,计算其和。获取一个int随机数,并判断当前随机值是否在该下标中。
例如传入: 1,5,9则 sum=15。随机【0-15】假设得到8则:
if(8<大于1) 返回 下标0 ,if(8<1+5) 返回1,if(8<1+5+9)则返回2,明显最终返回下标是2。
同理:0-1:返回 0;2-6 返回1;7-15 返回2;
方法如下:
/**
* @param weight 权重 , 总和不能超过int.max且大于0
* @return 对应下标
*/
public static int weightIndex(Integer... weight) {
int weightSum = 0;
for (int weightValue : weight) {
weightSum += weightValue;
}
int randomNum = random.nextInt(weightSum);
double stepWeightSum = 0;
for (int i = 0; i < weight.length; i++) {
stepWeightSum += weight[i];
if (randomNum < stepWeightSum) {
return i;
}
}
return -1;
}
根据得到的下标,获取下标对应的模板名,根据模板名再返回指定响应报文即可。