基本思路,概率總和不需要為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;
}
}