程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 關於用 random 生成偽隨機數的一個手筆,random

關於用 random 生成偽隨機數的一個手筆,random

編輯:C#入門知識

關於用 random 生成偽隨機數的一個手筆,random


  我在想還要不要寫什麼文字。確實不需要太多的文字描述吧。

  前奏插一個小話題,之前在網上看到這樣的冷笑話(有圖的),一個程序猿調試個程序,早上懷疑某某地方的錯誤,下午懷疑某某地方的錯誤,晚上懷疑某某地方可能錯了,睡覺了還是輾轉反側難以入眠。第二天早上,再看看代碼的時候,無意中找到了bug,漏下了逗號“,“,哈哈冷笑話。

  我這次也是疏忽了。在一個網站的項目中,用random去生成隨機數,作為上傳文件的名稱。當然在需要用戶上傳的文件中是不容易遇到這個bug的。但是在做爬蟲下載文件也用這個random生成隨機數的話就很可能遇到這個bug了。因為我們是用當前時間的毫秒去種子的。這裡有個致命的誤區:以為毫秒很小,能產生不相同的種子。但是毫秒雖小,但是程序是高速運轉的,高速到不可以思議,實際上在循環中產生的種子還是相同的。這一點我忽略了。

  描述結束,上圖:

 

 

代碼特寫(注意產生隨機數的方法):

 

 

結果:產生的隨機數的重復率是很高的,基本上是能連續重復三四個。我猜想是因為一毫秒程序能走個過程三四遍。

 

 

我們換另一種測試方式,結果不要重復,在重復的情況下,就進入循環生成隨機數。結果是生成了999個之後就進入死循環中了......

 

 

最後,我們修改了生成隨機數的方法,確保在循環中每次random的種子是不相同的。it works !!!

 

 

我們再把循環去掉,發現,在不需要循環的情況下,一次性也能產生 10000 個不相同的隨機數:

 

 

  原創:小明

  Email:[email protected]

  Date:2015/11/06

  原文鏈接:小明博客園-《關於用 random 生成偽隨機數的一個手筆》

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved