2014-09-23 68 views
2

我正在一個系統中,隨機時間後的圖像被替換。不過,我現在選擇數字1-5作爲顯示目的。我想知道是否可以使用Math.random()來創建比其他數字更稀有的數字。例如,如果我希望數字1通常出現,但希望數字5非常罕見,我可以使用Math.random()來做到這一點嗎?如果不能做到這一點?我如何使用Math.random()使罕見的共同結果

代碼我目前有:

$(function() { 
$("#test").click(function() { 
    randomGen(); 
}); 

function randomGen() { 
var rand = Math.floor((Math.random() * 5) + 1); 
var test = Math.floor((Math.random() * 15000) + 1); 
    if (rand === 1) { 
     console.log(rand); 
    } 
    if (rand === 2) { 
     console.log(rand); 
    } 
    if (rand === 3) { 
     console.log(rand); 
    } 
    if (rand === 4) { 
     console.log(rand); 
    } 
    if (rand === 5) { 
     console.log(rand); 
    } 
setTimeout(randomGen, test); 
} 
}); 

回答

1

不,Math.Random不適合直接用於使某些數字比其他數字更頻繁出現。

但是,您可以添加自己的「權重」的功能,這樣的事情:

//Returns a random with a 20% chance of 1, 40% chance of 2 or 3 
function WeightedRandom() 
{ 
    var num = Math.random() * 100; 

    if(num < 20) 
     return 1; 
    if(num < 60) 
     return 2; 
    else return 3; 
} 

這當然是高度手工,我相信你能想到的一個聰明的辦法,使之更加自動化。

+0

它告訴我「未捕獲的ReferenceError:r沒有定義」,我不知道你是否忘記了定義它,或者我應該定義它或者什麼XD – Cosmicluck 2014-09-23 00:31:05

+0

對不起,我是愚蠢的,並且先用C#編寫它。 :) – Codeman 2014-09-23 00:31:51

+0

是否爲你工作? – Codeman 2014-09-23 00:36:44

2

嘗試:

var rand = Math.floor(Math.pow(Math.random(), 2) * 5 + 1); 

通過平方0和1之間的隨機數,分佈偏向較低的數字。這使得1比2更普遍,這比3更普遍,等等。如果你想調整分佈或者改變它,調整指數。

+0

這是不對的。這只是將一個函數應用於數字,以使它們符合指數曲線,而不是明確加權。 – Codeman 2014-09-23 00:21:37

+1

@ Pheonixblade9:這可能是OP的含義。這比真實的加權函數簡單得多,因爲它以數學方式調整分佈。 – 2014-09-23 00:22:32