2015-03-08 22 views
1

第一次海報。我試圖模擬一個硬幣翻轉爲一個程序在golang。我正在嘗試使用math/rand,並使用time播種。使用數學/蘭德在golang中生成一個隨機變量

import (
"fmt" 
"math/rand" 
"time" 
)  

從我就在這裏,並在網上查找其他地方,我的實現應該工作:

func main() { 
    var random int 
    var i int 
    var j int 
    for j != 5 && i != 5 { 
     rand.Seed(time.Now().UnixNano()) 
     random = rand.Intn(1) 
     if random == 0 { 
      i = i + 1 
     } 
     if random == 1 { 
      j = j + 1 
     } 
    } 
fmt.Println(i, j) 
} 

但是,每次我運行它時,隨機最後總是爲0的種子沒有按也不會改變,這會讓我感到困惑。由於它在循環中,每次播種時不應該改變納秒時間嗎?

+1

還要注意的是,時間不會在轉到操場改變。 – Vitruvius 2015-03-08 20:15:52

+0

只要知道數學/蘭德生成僞隨機數不是真正的隨機數。 (...)這些僞隨機數很容易受到許多加密分析攻擊的影響 - 就像PlayStation發生的事情一樣(en.wikipedia.org/wiki/Random_number_generator_attack)。 – 2015-03-09 06:00:00

回答

5

請勿重複循環,只做一次。

rand.Intn(n)返回值> = 0和< n。所以rand.Intn(1)只能返回0,你要rand.Intn(2)得到0或1

固定碼: http://play.golang.org/p/3D9osMzRRb

+0

Ahhhhhhhhh謝謝!但爲什麼我只想種一次呢?這不會每次給我同樣的結果嗎? – agoedken 2015-03-09 23:43:09

+0

@agoedken我不認爲你明白[種子](https://en.wikipedia.org/wiki/Random_number_seed)是什麼,爲什麼它完成。 – 2015-03-10 00:21:20