Select 列表的索引取决于百分比

Select an index of a list depending on percentage

假设我有一个百分比列表:

列表百分比 = {52.3, 7.7, 20.0, 20.0};

我怎样才能根据百分比选择其中之一?例如,索引 0 (52.3) 有 52.3% 的机会被选中,而索引 2 和索引 3 都有 20% 的机会被选中。

提前致谢!

(我需要能够访问所选值的索引)

import java.util.Random;
public class HelloWorld{

 public static void main(String []args){
    Double[] percentages = {52.3, 7.7, 20.0, 20.0};
    int index = pickRandom(percentages);
    System.out.println(index);

 }

 public static int pickRandom(Double[] list) {
    // Returns random index of list 
     Random r = new Random();
     Double randomPercentage = r.nextDouble() * 100;
     double sum = 0;
     int index = 0;
     for(Double d : list) {
         sum += d;
         if(sum > randomPercentage) {
             return index;
         }
         index += 1;
     }
     return index;
 }
}

让我们分解一下这里发生的事情。您提供 pickRandom() 一个双精度数组。我们创建一个 Random 对象以生成 0 到 100 之间的随机值 (randomPercentage)。然后我们遍历列表对元素求和,直到我们超过 randomPercentage 和 return 我们所在位置的索引。