Java 根据机会从列表中输出

Java output from list based on chance

我正在尝试找出一种方法,它有两个参数,一个是 Object[],另一个是 float[],两者大小相同。浮点数是输出是对象列表中相应对象的机会,索引 i 中的对象有机会 (0.0-1.0) 存储在索引 i 中的浮点数中。如果所有值加在一起,机会列表中的值总和为 1.0。

我想让这个方法做的事情是 return 从列表中随机选择一个对象,即每个对象在机会列表中被选中的机会。示例 {banana, apple, orange} {0.1, 0.5, 0.4} 有 10% 的机会 return 吃香蕉,50% 的苹果和 40% 的橙子。

注意:该方法不能用于固定数量的对象,因此硬编码 if 链将不起作用:/

非常感谢任何帮助。

我的方法是使用变量来存储数组中位置的累积机会。

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];        
}

您需要做的就是计算每个元素在列表中出现的次数。

该列表中某个元素每次出现的次数除以所有出现次数的总和等于该元素从该列表中随机选取的概率。

ArrayList 可以包含您的元素。 您可以计算哈希映射或另一个 ArrayList 中每个元素的出现次数,前提是您跟踪哪个索引计算哪个元素。

您需要在元素列表中循环一次以收集计数数据,然后根据该计数数据简单地计算概率。