2014-01-10 58 views
0

我寫了一個函數A,在這個函數裏面有一段代碼。Math Random Coin Toss

rnd.Next(1,3); 

如果我運行我的A函數100次,並打印出結果,結果是不現實的,例如它總是勝利或總是輸。所以隨機函數是有問題的。我需要一個真實的隨機功能。

如何實現這一目標?

+2

你能告訴我們其餘的代碼(你在哪裏運行'A'百次並收集結果)? – Douglas

+0

請添加一段代碼讓我們來幫助你 – LittleSweetSeas

+9

讓我猜,你每次都在函數裏面播種'rnd'嗎? –

回答

2

我猜你已經做了Random一個典型的錯誤,你重新創建它每一次即:

Random rnd = new Random(); 
    int toss = rnd.Next(1,3); 

如果你這樣做,RND很可能每次從開始相同的種子,這就是爲什麼結果是嚴重歪斜。該解決方案可以是類似的東西:

// Let it be thread-safe 
    private static ThreadLocal<Random> s_Gen = new ThreadLocal<Random>(
    () => new Random()); 

    // Thread-safe non-skewed generator 
    public static Random Generator { 
    get { 
     return s_Gen.Value; 
    } 
    } 

    ... 

    int toss = Generator.Next(1,3); 
1

使用此

int i = rnd.Next(int.MaxValue) % 2; 

然後有一個檢查是否i = 0i = 1

編輯是的,因爲提到Dmitry Bychenko沒有實例化每個新的Random對象。