Java中的概率

时间:2011-11-18 14:17:05

标签: java probability

我很想知道,如何在Java中实现概率?例如,如果变量显示的可能性是1/25,那么我该如何实现呢?或任何其他概率?请指出我的总体方向。

5 个答案:

答案 0 :(得分:59)

您可以使用Random生成随机数,然后针对文字进行测试,以匹配您尝试实现的概率。

所以给出:

boolean val = new Random().nextInt(25)==0;

val将有1/25的概率为真(因为nextInt()具有从0开始返回任意数字的均匀概率,直到但不包括25。)

你当然也必须import java.util.Random;

如下所述,如果您获得多个随机数,则重用Random对象而不是一直重新创建它会更有效:

Random rand = new Random();
boolean val = rand.nextInt(25)==0;

...

boolean val2 = rand.nextInt(25)==0;

答案 1 :(得分:29)

通常使用随机数生成器。大多数人在区间[0,1]中返回一个数字,因此您可以检查该数字是否为< = 0.04。

if( new Random().nextDouble() <= 0.04 ) {  //you might want to cache the Random instance
   //we hit the 1/25 ( 4% ) case.
}

if( Math.random() <= 0.04 ) {
  //we hit the 1/25 ( 4% ) case.
}

请注意,有多个随机数生成器具有不同的属性,但对于简单的应用程序,Random类应该足够了。

答案 2 :(得分:5)

Java有一个名为java.util.Random的类,它可以生成随机数。如果您希望以1/25的概率发生某些事情,只需生成1到25之间(或0到24之间)的随机数,并检查该数字是否等于1.

if(new java.util.Random().nextInt(25)==0){
    //Do something.
}

答案 3 :(得分:5)

从1.7开始,它的使用效果更好(至少在并发环境中):

ThreadLocalRandom.current().nextInt(25) == 0

Javadoc

与当前线程隔离的随机数生成器。与Math类使用的全局Random生成器一样,ThreadLocalRandom使用内部生成的种子进行初始化,否则可能无法修改。适用时,在并发程序中使用ThreadLocalRandom而不是共享Random对象通常会遇到更少的开销和争用。当多个任务(例如,每个ForkJoinTask)在线程池中并行使用随机数时,使用ThreadLocalRandom是特别合适的。 此类的用法通常应为以下形式:ThreadLocalRandom.current()。nextX(...)(其中X为Int,Long等)。当所有用法都是这种形式时,永远不可能在多个线程中意外地共享ThreadLocalRandom。

该类还提供了其他常用的有界随机生成方法。

答案 4 :(得分:3)

也许你可以通过生成随机数来实现这一点。

  Random rn = new Random();
    double d = rn.nextDouble();     // random value in range 0.0 - 1.0
    if(d<=0.04){
    doSomeThing();
    }