我试图找出一种方法,它有两个参数,一个是 Object[],另一个是 float[],两者大小相同。 float 是输出是对象列表中相应对象的机会,索引 i 中的对象有机会 (0.0-1.0) 存储在索引 i 中的 float 中。如果所有值加在一起,机会列表中的值总和为 1.0。
我想让这个方法做的事情是从列表中随机返回一个对象,即每个对象在机会列表中被选中的机会。示例 {banana, apple, orange} {0.1, 0.5, 0.4} 有 10% 的机会返回香蕉,50% 的苹果和 40% 的橙子。
注意:该方法不能用于固定数量的对象,因此硬编码的 if 链将不起作用:/
非常感谢任何帮助。
最佳答案
我的方法是使用 a 变量来存储数组中位置的累积机会。
public Object randomObject(Object[] objects, float[] chances){
//Implement here validations, about arrays size and chances values.
float random = (float) Math.random();
float acumulatedChance = 0f;
for (int i = 0; i < chances.length; i++) {
acumulatedChance += chances[i];
if (acumulatedChance >= random) {
return objects[i];
}
}
return objects[objects.length-1];
}
关于基于机会从列表中输出Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418139/