[英]C# Random generation
您應該只初始化一次種子,然后重新使用它:
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.