[英]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
隨機數生成器隔離到當前線程。 與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.