基于机会从列表中输出Java

标签 java random

我试图找出一种方法,它有两个参数,一个是 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/

相关文章:

c# - 随机数概率

javascript - HTML JavaScript 随机数选择

java - 如何提高 Java ArrayList 的性能

Java UDP DatagramSocket 未收到 DatagramPacket

线程 "main"java.lang.NullPointerException 七人骰子游戏中的 JAVA 异常

random - 如何实现(伪)硬件随机数生成器

java - elasticsearch中更新文档的效率

java - pdf 合并期间出现 OutOfMemoryError

Java Random.nextDouble() 概率

c# - 随机字符串生成 - 避免重复