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 我们所在位置的索引。
假设我有一个百分比列表:
列表百分比 = {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 我们所在位置的索引。