基于偶然性

时间:2015-05-23 22:20:38

标签: java random

我试图找出一个方法,它作为两个参数,一个是Object [],另一个是float [],两个大小相同。浮点数是输出作为对象列表中相应对象的机会,索引i中的对象有机会(0.0-1.0)存储在索引i中的浮点数中。如果全部总结在一起,则机会列表上的值总计为1.0。

我希望这个方法做的事情是随机返回列表中的一个对象,这是在机会列表中选择每个对象的机会。示例{banana,apple,orange} {0.1,0.5,0.4}有10%的机会返回香蕉,50%的苹果和40%的橙色。

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

该列表中元素的每个外观的数量除以所有外观的总和等于元素将从该列表中随机选取的概率。

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

您需要循环遍历元素列表以收集计数数据,之后只需计算该计数数据的概率。