运行程序给我的结果与调试模式不同
本文关键字:调试 模式 结果 程序 我的 运行 | 更新日期: 2023-09-27 18:17:23
我提供了一个简单的代码,它将输出0到100之间的10个随机数字。当我在visual studio (c#)中使用F5运行这个时,我得到了相同的数字10次。然而,如果我通过调试模式运行它,使用F10或F11逐行运行,我得到10个不同的数字(可能不是所有的数字都不同,但它们是随机的)。
public static void rand() {
for (int j = 0; j < 10; j++) {
Random r = new Random();
Console.WriteLine( r.Next(100));
}
}
我知道如何解决这个问题,这是通过在循环外实例化随机r并通过引用复制,但我想了解为什么会发生这种情况。我认为这与种子有关,但程序在调试模式下运行时确实可以工作,这让我感到困惑。
而且,现在我在质疑我是否总是需要测试调试模式是否给我正确的结果。
您应该在循环之前创建Random
实例。
public static void rand() {
Random r = new Random();
for (int j = 0; j < 10; j++) {
Console.WriteLine(r.Next(100));
}
}
解释如下:
…默认种子值来自系统时钟,具有有限的分辨率。因此,通过调用默认构造函数连续创建的不同Random对象将具有相同的默认种子值,因此将产生相同的随机数集。这个问题可以通过使用一个随机对象来生成所有随机数来避免。…
如果你想使用不同的Random
实例,你应该使用不同的seed
值。例如j
变量:
public static void rand()
{
for(int j = 0; j < 10; j++)
{
Random r = new Random(j);
Console.WriteLine(r.Next(100));
}
}
回答你的问题:…如果我总是需要测试调试模式是否给我正确的结果
不,在调试模式下你不需要怀疑结果。他们是对的。