2007年12月1日 星期六

C# 產生亂數(Random Number)的方式

昨天因為有需求要產生很多個亂數,想說 C# 應該很容易....

後來發現應該要用 Random 這個 Class 去產生.........(原本以為 Math 裡面會有 static method 可以用....)

不過 Random Class 使用起來會有問題,產生的亂數重複性極高,簡單來說,很明顯看的出有問題,後來經過修正後已經解決,以下用一段程式碼說明修改前後的差距:
class Program
{
static void Main(string[] args)
{
Random outerRnd = new Random(); //Random class 要放在 loop 外才可以!
for (int i = 0; i < 10; i++)
{
Random innerRnd = new Random(); //放在 loop 內會有問題
Console.WriteLine("inner:" + innerRnd.Next(10, 20).ToString() + " outer:" + outerRnd.Next(10, 21).ToString() + "t");
/* 顯示結果如下:
inner:13 outer:13
inner:16 outer:12
inner:16 outer:12
inner:16 outer:13
inner:16 outer:18
inner:16 outer:20
inner:16 outer:15
inner:16 outer:19
inner:16 outer:11
inner:19 outer:17
*/

}
Console.ReadLine();
}
}

2 則留言:

  1. 我是路過的某個W開頭的路人...

    回覆刪除
  2. 因為你使用了無參數的建構子,他預設是使用時間作為亂樹種子,故短時間內很容易得到重複的亂數。 建議可以這樣用,即可解決容易重複的問題:
    Random rnd = new Random(Guid.NewGuid().GetHashCode());

    回覆刪除