Random類短期大量隨機重複的問題

先聲明一下,我是在那篇文章上看到的解決方法:算法

http://dl.download.csdn.net/down10/20141103/4b173214e41ff3207305c2470524b0f3.zip?response-
content-disposition=attachment%3Bfilename%3D%E8%84%9A%E6%9C
%AC.zip&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1454872774&Signature=HKeFoCiyZteMjgO9ScKmje
iXMg4%3D網絡

方法其實沒啥不一樣 只是代碼因爲大神手打,致使代碼大小寫不清楚,新人看到還得改許多,就如我!因此將代碼從新寫一遍。一是爲了方便你們也是爲了怕忘了,畢竟不經常使用/dom

其中重點是Guid:全局惟一標識符(GUID,Globally Unique Identifier)是一種由算法生成的二進制長度爲128位的數字標識符。GUID主要用於在擁有多個節點、多臺計算機的網絡或系統中。在理想狀況下,任何計算機和計算機集羣都不會生成兩個相同的GUID。GUID 的總數達到了2^128(3.4×10^38)個,因此隨機生成兩個相同GUID的可能性很是小,但並不爲0。GUID一詞有時也專指微軟對UUID標準的實現。測試

在理想狀況下,任何計算機和 計算機集羣都不會生成兩個相同的GUID。 隨機生成兩個相同GUID的可能性是很是小的,但並不爲0。因此,用於生成GUID的算法一般都加入了非隨機的參數(如時間),以保證這種重複的狀況不會發生。
 1         //聲明一個靜態整數變量 經過他的改變 測試後感受能夠是隨機數 再也不緊靠(就是隨機數雖然不一樣可是 接近)
 2          private static int randomCount = 0;
 3          /// <summary>
 4          /// 利用guid哈希值、當前時間ticks和計數器相乘來計算種子,生成rand變量。
 5          /// </summary>
 6          static float CreateRandomInt()
 7          {
 8              randomCount++;
 9              //s實例化一個Guid類
10              Guid guid = Guid.NewGuid();
11 
12              int key1 = guid.GetHashCode();
13              // 摘要:獲取表示此實例的日期和時間的計時週期數。
14              // 返回結果: 表示此實例的日期和時間的計時週期數。該值介於 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks
15              //     之間。
16              int key2 = unchecked((int)DateTime.Now.Ticks);
17 
18              int seed = unchecked(key1 * key2 * randomCount);
19              // 使用指定的種子值初始化 System.Random 類的新實例。
20              //Seed:用來計算僞隨機數序列起始值的數字。若是指定的是負數,則使用其絕對值。
21              //這就保證了rand的不一樣
22              Random rand = new Random(seed);
23              float newRand = rand.Next(0, 100);
24              return newRand;
25          }
相關文章
相關標籤/搜索