如何在数组中随机选择多个值,每个值都有自己的概率?在Java中

时间:2015-02-27 14:00:31

标签: java random probability

我正在构建一个非常简单的基于文本的俄罗斯轮盘“游戏”,当我制作一个7槽bulletChamber阵列时,我有点意识到我只存储两个值,这些值是“有子弹”或“没有子弹“。

而我只是想知道是否有一种方法可以在两个变量之间随机选择,其中每个变量都有自己的概率,前5/7表示没有子弹,2/7表示子弹?

3 个答案:

答案 0 :(得分:1)

当然,只需将Math.random()乘以总机会数并检查> =(在这种情况下)子弹的数量:

public static void main(String[] args) {
    System.out.println((Math.random() * 7) >= 2 ? "Click" : "Bang!");
}

答案 1 :(得分:0)

这可能不是一个好的答案,但它有效......

 bullets = [0,0,0,0,0,1,1];

如果你从0到6(数组的索引)随机编辑,你将有5/7的机会不发射子弹(在子弹上获得0 [randomNum]),并且有2次发射子弹的机会(在子弹上获得1 [randomNum])。

答案 2 :(得分:0)

您可以这样做:

public static List<Boolean> getSlotsList(int bullets, int emptySlots) {
    List<Boolean> shoots = new ArrayList<Boolean>();
    for (int i = 0; i < bullets; i++) {
        slots.add(Boolean.TRUE);
    }
    for (int i = 0; i < emptySlots; i++) {
        slots.add(Boolean.FALSE);
    }
    Collections.shuffle(shoots);
    return shoots;
}

您可以使用上述方法创建包含所需概率的列表。然后你可以删除元素并检查是否有子弹:

/* Remove element from the list, and check the result */
List<Boolean> shoots = getSlotsList(2, 5);
if (shoots.remove(0) == true) {
    /* There is a bullet */
} else {
    /* Empty sloot */
    /* You could use the list again with the new bullet probabilities */
}