【c#】亂數產生法
在c#當中若要產生亂數有以下的方法
首先要在程式當中,先new一個Random物件,
如下
Random crandom=new Random();
或
Random crandom2=new Random() <=先給一個亂數的初始值,但這樣的話,都會產生相同的亂數
其產生亂數的方法有
1.crandom.Next() ==>傳回一個int數值,其範圍介於 0-2,147,483,6747之間。
2.crandom.NextDouble==> 將會產生一個Double的數值,其範圍在0.0 - 1.0之間
3.利用next的多載
crandom.Next(int max) ,如 x=crandom.Next(2),產生的亂數將會是 0<x<2之間的數值
crandom.Next(int min,int max) ,例如 y=crandom.Next(1,3) ,產生的亂數 x>= 1, x<3;
但是後來爬了一下文,發現Random會有一個很詭異的問題,那就是重複性極高的問題,
因此爬文爬到了一些解決方法,如下
- 方法1: Random rnd = new Random(Guid.NewGuid().GetHashCode())
(資料來源:http://mogerwu.pixnet.net/blog/post/28856448-c%23%E4%BA%82%E6%95%B8%E7%94%A2%E7%94%9F)
這個原理是利用Guid.NewGuid()每一次所產生出來的結果都是不同的,再利用它產生雜湊碼來當成亂數產生器的種子,產生出真的很亂的亂數。
Guid.NewGuid():GUID 是一個 128 位元的整數 (16 位元組),可以在需要唯一識別項時用於所有電腦和網路。這種識別項被複製的可能性非常低。 (From MSDN)
GetHashCode():產生一組雜湊碼
- 方法2:LINQ的寫法
這是外國魔人寫的,但是因為還沒學到,我也還沒花時間去研究,所以有興趣的就自己去瞧瞧吧!
請參考網址:http://netpl.blogspot.tw/2008/07/generating-random-sequences-with-linq.html