golangでプログラムのコインフリップをシミュレートしようとしています。私は使用しようとしていてmath/rand
、を使用してシードしていtime
ます。
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になります。シードも変更されないため、混乱します。それはループ内にあるので、シードされるたびにナノ秒単位の時間が変化してはいけませんか?
ループで再シードしないでください。一度だけ実行してください。
rand.Intn(n)
> = 0および<nの値を返します。したがってrand.Intn(1)
、0のみを返すことができ、rand.Intn(2)
0または1を取得する必要があります。
修正されたコード:http : //play.golang.org/p/3D9osMzRRb
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加