亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

已設置 rand 的種子,但輸出紅包金額相同

func?SimpleRand(count,?amount?int64)?int64?{
???//?當紅包剩余一個
???if?count?==?1?{
??????return?amount
???}
???//?計算最大可調度金額
???max?:=?amount?-?min*count
???rand.Seed(time.Now().UnixNano())
???x?:=?rand.Int63n(max)?+?min
???return?x
}
func?main()?{
???count,?amount?:=?int64(10),?int64(100)
???for?i?:=?int64(0);?i?<?count;?i++?{
??????x?:=?algo.SimpleRand(count,?amount*100)
??????fmt.Print(float64(x)/float64(100),?",?")
???}
???fmt.Println()
}

各位小伙伴,已設置 rand 的種子,最后輸出的紅包金額相同。

輸出:32.74, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66,?

如果設置這樣

for?i?:=?int64(0);?i?<?count;?i++?{
???time.Sleep(10)
???x?:=?algo.SimpleRand(count,?amount*100)
???fmt.Print(float64(x)/float64(100),?",?")
}

紅包金額才能跟老師的一樣。

這是程序運行太快,時間差太小導致的嗎?

正在回答

5 回答

@?PumkinPie?sleep的方法不可取啊,rand.Seed是為了改變初始隨機種子數,反正程序重新啟動時的隨機序列一樣的,只要保證每次重啟后的初始隨機種子數不一樣就行。

0 回復 有任何疑惑可以回復我~
#1

PumpkinPie_ 提問者

好,謝謝老師
2019-03-20 回復 有任何疑惑可以回復我~
#2

lili001 回復 PumpkinPie_ 提問者

紅包的總金額不對吧,早就超過100了
2019-07-31 回復 有任何疑惑可以回復我~
func?test2(){

???amount?:=?int64(100)
???initialAmount?:=?amount?*?100
???for?count?:=?int64(10);?count?>=?1;?count--?{
??????randomAmount?:=?algo.SimpleRandom(count,?initialAmount)
??????initialAmount?-=?randomAmount?//?初始金額減去已經分配的金額
??????fmt.Printf("第%d個紅包的金額是%f\n",?count,?float64(randomAmount)?/?float64(100))
???}
}

使用這個測試用例,可以保證每個紅包的總和 等于 總金額。

http://img1.sycdn.imooc.com//5dfb82fd0001513c04610361.jpg


0 回復 有任何疑惑可以回復我~

發現總金額不對,老師能幫忙看下嗎?1972,2370,5531,9900,5433,857,5400,7428,7838,4710,all: 51439

func?main()?{
???count,?amount?:=?int64(10),?int64(100)
???sum??:=?int64(0)
???for?i?:=?int64(0);?i?<?count;?i++?{
??????x?:=?algo.SimpleRand(count,?amount*100)
??????fmt.Print(x,",")
??????//fmt.Print(float64(x)/float64(100),?",")
??????sum?+=x
???}
???fmt.Println("all:",?sum)
???fmt.Println()
}


0 回復 有任何疑惑可以回復我~
#1

卡卡小獅子

可以參考下我的測試用例
2019-12-19 回復 有任何疑惑可以回復我~

如果不放在main中,可以隨機數種子增加一個再加上一個隨機就好啦

https://img1.sycdn.imooc.com//5d010f5600015b8d07060564.jpg

0 回復 有任何疑惑可以回復我~

已解決:

程序運行的太快,UnixNano 生成的時間都是一樣的,從而導致 生成 rand 數值也是一樣的。

https://img1.sycdn.imooc.com//5c8f0c4800012bc702710083.jpg

解決辦法:

1,可以在 seed 設置完成以后 time.Sleep(1),情況會好很多。

https://img1.sycdn.imooc.com//5c8f0b5200017e9102240381.jpg

https://img1.sycdn.imooc.com//5c8f0b5200010e8b06980791.jpg

2,在 main 函數里 設置?

rand.Seed(time.Now().UnixNano())

讓它只運行一次即可。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

已設置 rand 的種子,但輸出紅包金額相同

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號