悲催,老是記不住真隨機數怎么寫,次次翻項目筆記,更悲催的是,在外面還翻不了項目筆記。。。。。。
在這里記一份好了,順便分享給不懂的朋友們。
偽隨機數相關的東西都不寫了,神馬測試,數據,截圖,通通省略。好吧,心軟,給一點點。
跑一遍就知道什么是偽隨機數了:
for (int i = 0; i < 1000; i++) { Console.WriteLine(new Random().Next(1, 1000)); }
隨便扯兩句:偽隨機數之所以會重復,是因為隨機數方法默認以時間為隨機種子,而在編程里,時間精度終究有限,短時間內多次取出時間,這個時間值就可能重復,
時間(隨機數種子)重復了,隨機數自然也重復。所以我們的解決思路就是提供一個永不重復的隨機數種子。
上代碼:
獲取強隨機數種子
/// <summary> /// 描 述:創建加密隨機數生成器 生成強隨機種子 /// </summary> /// <returns></returns> static int GetRandomSeed() { byte[] bytes = new byte[4]; System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider(); rng.GetBytes(bytes); return BitConverter.ToInt32(bytes, 0); }
使用方法:
int ranNumer = new Random(GetRandomSeed()).Next(numMin, numMax);
PS:方法二
剛剛說為什么會重復的時候,我突然想到,以時間為隨機數種子,短時間內我不讓它取那么多次,不就可以避免重復了?
試了一下:
for (int i = 0; i < 1000; i++) { Thread.Sleep(1);//強制停止一毫秒 Console.WriteLine(new Random().Next(1, 1000)); }
果然不重復了,我果真機智~~ *^_^*