基本思路,概率总和不需要为100%,首先先算出所有的概率总和,然后随机一个值在
0到总和之间,计算这个值落入的区间是在哪个位置。这种算法较为平均。
public static Integer duageAward(List<Double> turntables){
Double sumPbi = 0.0;
for (Double n: turntables){
sumPbi += n;
}
Integer turntableId = null;
Double rsel = RandomUtils.nextDouble(0,sumPbi);
for (int i = 0;i < turntables.size();i++){
if (turntables.get(i).compareTo(rsel)<0){
rsel = rsel - turntables.get(i);
}else{
turntableId = i;
break;
}
}
return turntableId;
}
public static void main(String[] args) {
List<Double> nums = new ArrayList<>();
nums.add(10.1);
nums.add(20.3);
nums.add(99.92);
nums.add(87.80);
nums.add(99.90);
nums.add(99.91);
int []arr=new int[6];
for (Long i = 0L;i<100000000L;i++){
int idx = duageAward(nums);
arr[idx] = arr[idx] + 1;
}
}
原文:https://www.cnblogs.com/forbeat/p/13055869.html