簡體   English   中英

C#隨機生成

[英]C# Random generation

我剛剛在線上傳遞了這篇文章: C#CornerC#Corner和他的文章(具有13年以上經驗的軟件開發人員)建議使用System.Random如下:

private int RandomNumber(int min, int max)
{
    Random random = new Random();
    return random.Next(min, max); 
}

那不是每次都會給他相同的號碼嗎?

編輯:
所以我的問題將變成:Random如何選擇其種子? 一個恆定的或當前的時間值?

謝謝

您應該只初始化一次種子,然后重新使用它:

private Random random = new Random();

private int RandomNumber(int min, int max)
{
    return random.Next(min, max); 
}

當經常在較短的時間間隔內調用該方法時,它將得到相同的結果。 這是因為Random的種子是使用當前時間值初始化的。 這也是為什么許多人會遇到隨機根本不是隨機的問題的原因。

順便說一句,它不是Math.Random而是System.Random


編輯之后,以下是一些有關如何初始化隨機數的信息。 該信息來自上面的鏈接。

隨機數生成從種子值開始。 如果重復使用相同的種子,則會生成相同的數字序列。 產生不同序列的一種方法是使種子值與時間相關,從而對每個新的Random實例產生不同的序列。 默認情況下,Random類的無參數構造函數使用系統時鍾來生成其種子值,而其參數化構造函數可以基於當前時間的滴答數獲取Int32值。 但是,由於時鍾具有有限的分辨率,因此使用無參數構造函數連續創建不同的Random對象會創建隨機數生成器,該生成器將生成相同的隨機數序列。

否,因為new Random()將以當前時間作為種子進行初始化。 也就是說,您仍應保留random實例random用它。

也許。 根據當前時間在沒有明確種子的情況下創建Random種子。 如果您打電話給RandomNumber速度足夠快,您偶爾也會得到相同的號碼。

但是,您的直覺是正確的。 每當您需要一個新的數字時,創建一個新的Random對象都是愚蠢的。 您應該創建一個實例並使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM