2014-03-25 92 views
0

我需要根據概率選擇一個可能的輸出。可以說我有加載骰子(加權隨機)

p[1]=20% 
p[2]=40% 
p[3]=15% 
p[4]=25% 

P []的大小是可變(在這種情況下4),我知道它們一起求和,以100%。如何根據概率從p中選擇一個元素?

+2

第一個想法:創建一個介於1和100之間的隨機整數值。然後通過if/else來檢查它的值併合理設置你的數組。 – pzaenger

+0

困難在於我不知道p []中有多少個元素。由於這個原因,我不能硬編碼的東西,如果(0 user3453281

+0

http://stackoverflow.com/questions/17250568/randomly-choosing-from-a-list-with加權概率 – pjs

回答

1

使用這種最簡單的方法是使用Random.nextFloat()方法對於這一點,然後檢查其範圍之間的隨機數0-1落在英寸

根據您的問題的評論,你可能想要更多的東西一樣這個:

Random r = new Random(); 
p[0]=0.2; 
p[1]=0.4; 
p[2]=0.15; 
p[3]=0.25; 

float myVal = r.nextFloat(); 
float probSum = 0.0; 

for (int i = 0; i < p.length; p++) { 
    probSum += p[i]; 
    if (myVal <= probSum) { 
     return i; 
    } 
} 
return p.length-1; 

顯然你可以很漂亮,但這是一個普遍的想法,應該工作。

+0

我不能這樣編碼,因爲我不知道p []中有多少個元素,所以我不知道我需要多少其他元素(if)。我所知道的是我有n個元素,它們的概率合計爲100%。我也知道他們的個人概率 – user3453281

+0

@ user3453281我編輯了我的答案來反映這一點。讓我知道這是否是你需要的。 –

+0

哦,這很漂亮,看起來非常像我需要的東西。我總結他們的個人概率,直到我得到我的隨機數。是的,應該有效。謝謝你,朋友。 – user3453281