2015-12-21 20 views
0

我打算在for循環中生成100個隨機數。唯一的問題是,因爲random()方法是基於定時器的,所以它會連續產生3-4次相同的數字。 我可以通過在我的循環中包含一個threat.sleep()方法來解決此問題。因此,我想知道random()方法的確切刷新率,以便我可以匹配threat.sleep()方法,並且不會延遲超過必要的時間。C#中random()方法的刷新率是多少?

這裏是我的代碼:

for (int i; i <= 100; i += 1) 
{   
    Random rndNum = new Random(); 
    Console.WriteLine(rndNum.Next(1, 100)); 
    Thread.Sleep(X); //I want to know the best value of X (as less delay as possible) 
} 

多謝

/HamMan4Ever

+1

不要在每次迭代中生成一個新的Random()。在循環之前生成一個新的Random()*,並在整個循環中重用。 –

回答

0

它等於系統時鐘的刷新率,因爲它使用的時間作爲種子。但是對於你的工作,你應該將Random實例放在循環之外。

Random rndNum = new Random(); 
for (int i; i <= 100; i += 1) 
{   
    Console.WriteLine(rndNum.Next(1, 100)); 
} 

因爲它使用的時間作爲種子,它會使用唯一的,並會產生,即使你只要使用同一個實例多次調用它在同一時間隨機數。

+0

說刷新率與系統時鐘匹配是誤導性的,並且提供OP的錯誤概念,即在調用Random類的方法時存在刷新率等問題。那沒有。 – sstan

+0

雖然沒有刷新率,但因爲它使用系統時間,刷新率將與時間更新的速率相匹配。 –

+0

我不確定我們有*刷新率*的相同定義。 – sstan

1

我從來沒有聽說過或讀過Random類是基於定時器的。您可能已經聽說系統時間爲播種,但在此之後,每次撥打Next將返回一個隨機數,通常與以前不同。通常,當您看到來自Random的非隨機數據時,這是因爲您通過循環在每次迭代中創建了一個新的隨機數,就像您在共享的代碼中一樣。由於每個都是從系統時鐘播種而來,並且您正在快速創建幾個,所以您會看到重複的模式。在循環外創建您的Random以使此問題消失。