簡體   English   中英

Java中的概率

[英]Probability in Java

我很想知道,我如何在Java中實現概率? 例如,如果變量顯示的可能性是1/25,那么我該如何實現呢? 或任何其他概率? 請指出我的總體方向。

您可以使用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;

通常,您使用隨機數生成器。 大多數人在區間[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類應該足夠了。

從1.7開始,最好使用(至少在並發環境中):

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

的Javadoc

隨機數生成器隔離到當前線程。 與Math類使用的全局Random生成器一樣,ThreadLocalRandom使用內部生成的種子進行初始化,否則可能無法修改。 適用時,在並發程序中使用ThreadLocalRandom而不是共享Random對象通常會遇到更少的開銷和爭用。 當多個任務(例如,每個ForkJoinTask)在線程池中並行使用隨機數時,使用ThreadLocalRandom是特別合適的。 此類的用法通常應為以下形式:ThreadLocalRandom.current()。nextX(...)(其中X為Int,Long等)。 當所有用法都是這種形式時,永遠不可能在多個線程中意外地共享ThreadLocalRandom。

該類還提供了其他常用的有界隨機生成方法。

Java有一個名為java.util.Random的類,它可以生成隨機數。 如果您希望以1/25的概率發生某些事情,只需生成1到25(或0和24)之間的隨機數,並檢查該數字是否等於1。

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

也許你可以通過生成隨機數來實現這一點。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM