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