我学习Java才一个半星期,目前为止,我能想到的在代码中加入随机性元素的唯一方法是使用 Random 类的 nextInt 方法,下面是我的方法的一部分:
Random random = new Random();
int randomInt = random.nextInt(10)+1;
[...]
if(randomInt <= 3){
System.out.println("Magnificent!");
} else if (randomInt >= 7){
System.out.println("Marvelous!");
} else {
System.out.println("Delectable!");
}
然而,它冗长且缺乏灵活性,我希望能够以简洁的方式将总概率为1的片段分配给不同的场景:事情A发生的概率是0.3,事情B发生的概率是0.5,事情С发生的概率是0.2,我怎么才能做到呢?
2条答案
按热度按时间s5a0g9ez1#
在一般情况下,您有一组加权值,它可以基于概率产生一个随机值,该概率是其权重占总权重的分数。权重可以是归一化的(意味着它们的和为1),也可以是非归一化的,这是一个更容易的假设。
当从该集合中滚动随机值时,最有效的方法是首先检查概率最高的值。滚动0和总权重之间的随机数,然后按权重顺序(降序)遍历这些值,并检查随机数是否低于累积权重-〉如果是,则返回该值。
代码:
示例:
332nm8kg2#
通常,你会使用Random.nextDouble(),测试
random.nextDouble() < 0.3
的概率为0.3。为了检验一种以上的可能性,你需要把一些东西加起来,例如