C# Random 隨機數直重複問題


分類

建立時間: 2022年6月6日 10:53
更新時間: 2022年6月6日 10:53

說明

對於初學者來說,想要隨機產生一個數時大概會這樣做

Random random = new();
random.Next();

但如果我在迴圈執行時,很有可能會發生重複的問題

for (int i = 0; i < 10; i++)
{
    Random ran = new();
    Console.WriteLine(ran.Next());
}

如果你沒有發生重複,來試試看這個就比較有感了

for (int i = 0; i < 10; i++)
{
    Random ran = new(12345);
    Console.WriteLine(ran.Next());
}

這個問題很有可能在實例類別時發生

RandomNumber.cs

using System;
namespace RandomTest
{
    public class RandomNumber
    {
        public Random random = new();
    }
}

program.cs

for (int i = 0; i < 10; i++)
{
    RandomNumber ran = new();
}

原因

上面 12345 是 Random 的種子
預設會帶入系統的時間,所以當執行很快的時候,很有可能發生重複的問題

解決辦法

共用 Random 實例


Random ran = new();

for (int i = 0; i < 10; i++)
{
    Console.WriteLine(ran.Next());
}

如果是類別,可以將 Random 設成 static

RandomNumber.cs

using System;
namespace RandomTest
{
    public class RandomNumber
    {
        public static Random random = new();
    }
}
觀看次數: 883
c#random重複隨機亂數
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!