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