国产探花免费观看_亚洲丰满少妇自慰呻吟_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的實現原理
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高淳县| 开平市| 商河县| 长泰县| 新平| 资溪县| 长汀县| 康平县| 淳化县| 宜春市| 鄱阳县| 苏尼特左旗| 罗源县| 扬州市| 峨眉山市| 阳江市| 深州市| 玉山县| 泰和县| 兖州市| 镇安县| 葵青区| 陕西省| 区。| 甘孜县| 蕉岭县| 柘城县| 崇左市| 云林县| 清徐县| 读书| 卢氏县| 乡宁县| 资阳市| 舒兰市| 长宁县| 舞钢市| 偃师市| 内江市| 郎溪县| 香河县|