2017-07-08 56 views
-4

I型在VS 2017年將下面的代碼:隨機行爲:重複相同數量

namespace Test { 
    class MyClass { 
     public static Random randomkey; 
     static MyClass() { 
      randomkey = new Random(); 
     } 
     public MyClass() { 
      randomkey = new Random(); 
     } 
     public int returnkey() => randomkey.Next(); 
    } 
    class Program { 
     private static void Main(string[] args) { 
      try { 
       Console.WriteLine(MyClass.randomkey.Next()); 
       var x = new MyClass(); 
       Console.WriteLine(x.returnkey()); 
       var y = new MyClass(); 
       Console.WriteLine(y.returnkey()); 
       Console.ReadLine(); 
      } catch (Exception e) { 
       Console.WriteLine(e.Message); 
      } 
     } 
    } 
} 

然後單擊 「調試」 按鈕,我發現結果很奇怪:

Output - The same random number

於是,我試着點擊「運行至光標位置」按鈕,結果成了不同:

Output - Different random numbers

爲什麼?

+1

請不要使用無關標籤的垃圾郵件。 –

回答

-1

隨機函數使用系統時間初始化隨機數發生器。所以運行你的代碼真的很快就會得到相同的隨機數。添加一個睡眠,然後你會得到預期的結果。

 private static void Main(string[] args) { 
      try { 
       Console.WriteLine(MyClass.randomkey.Next()); 
       System.Threading.Thread.Sleep(5); 
       var x = new MyClass(); 
       Console.WriteLine(x.returnkey()); 
       System.Threading.Thread.Sleep(5); 
       var y = new MyClass(); 
       Console.WriteLine(y.returnkey()); 
       Console.ReadLine(); 
      } catch (Exception e) { 
       Console.WriteLine(e.Message); 
      } 
     } 
+0

無論誰給我的負面點,永遠不會運行發佈的代碼。 – jdweng