2017-07-08 81 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