国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Random的實現原理

2019-11-17 03:13:32
字體:
來源:轉載
供稿:網友

Random的實現原理

在知乎上看到老趙回答了你在編程時見過最愚蠢的 Bug 是什么?


首先是段JS代碼:
var number = 10;var showNumber = function () {  alert(number);} (function () {  number = 20;  showNumber();})()
不要運行,猜猜看這段代碼會alert出什么結果來?答案是:10。好吧,為什么不是20?再來一段.NET的:
var numbers = new int[10];// 生成10個隨機數for (var i = 0; i < numbers.Length; i++) {  numbers[i] = new System.Random().Next();}
生成10個隨機數,盡管每次運行結果都不同,但為什么每次這10個數字都是相同的?
其中第一js是因為沒在showNumber后面(第四行)加“;”;第二.NET的隨機數這個問題我倒是沒遇到過,幾乎每次只會用一個不會一次調用多個,所以沒注意。先看看msdn怎么說: Random構造函數Random() 使用與時間相關的默認種子值,初始化Random類的新實例。 The default seed value is derived from the system clock and has finite resolution.As a result, differentRandomobjects that are created in close succession by a call to the default constructor will have identical default seed values and, therefore, will PRoduce identical sets of random numbers.This problem can be avoided by using a singleRandomobject to generate all random numbers.You can also work around it by modifying the seed value returned by the system clock and then explicitly providing this new seed value to theRandom(Int32)constructor.(英語不好,就貼原文了) Random的種子利用的是系統時鐘種子。而Windows系統時鐘的更新頻率大概在10ms左右(各個版本不一樣),而這個for循環的執行顯然要快得多,那每次利用的就是同一個種子,種子相同,Random產生相同的隨機數(即使實例不同也一樣)。所以返回的10個值都是一樣的了。 解決方法: 第一種利用Thread.Sleep讓線程休眠一段時間(時間大于Windows系統時鐘的更新頻率),這個不推薦使用。 第二種將初始化移出循環: var numbers = new int[10]; // 初始化Random System.Random rd = new System.Random(); for (var i = 0; i < numbers.Length; i++) { numbers[i] = rd.Next(); }參考文檔:MSDN:Random 類Random的實現原理
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵石县| 勃利县| 新和县| 永修县| 子长县| 儋州市| 济源市| 家居| 怀远县| 兖州市| 靖江市| 太康县| 慈利县| 崇阳县| 沂源县| 肥城市| 卢龙县| 忻州市| 壶关县| 华容县| 虹口区| 周至县| 洛宁县| 桃园县| 合作市| 溧阳市| 禹城市| 潍坊市| 凤庆县| 泽库县| 博野县| 黎城县| 金塔县| 武乡县| 江津市| 云浮市| 临猗县| 四平市| 佛山市| 竹山县| 安庆市|