close

【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

 

 

 

arrow
arrow
    文章標籤
    c# 亂數 Random
    全站熱搜

    ksjolin facebook 發表在 痞客邦 留言(0) 人氣()