循环中的随机数

Sam*_*Sam 10 c# random

有问题在循环中生成随机数.可以通过使用Thread.Sleep绕过它但是在更优雅的解决方案之后.

for ...
    Random r = new Random();
    string += r.Next(4);
Run Code Online (Sandbox Code Playgroud)

最终将以11111 ... 222 ...等结束

建议?

Chr*_*isF 56

将随机数生成器的声明移出循环.

随机数生成从种子值开始.如果重复使用相同的种子,则生成相同的数字序列.产生不同序列的一种方法是使种子值与时间相关,从而与每个新的Random实例产生不同的序列.默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,...

资源

通过在循环中声明你有效地一遍又一遍地调用具有相同值的构造函数 - 因此你得到相同的数字.

所以你的代码应该变成:

Random r = new Random();
for ...
    string += r.Next(4);
Run Code Online (Sandbox Code Playgroud)


Hei*_*nzi 9

Random r = new Random(); 
for ... 
    string += r.Next(4); 
Run Code Online (Sandbox Code Playgroud)

new Random()将使用基于当前日期和时间的种子初始化(伪)随机数生成器.因此,Random在相同日期和时间创建的两个实例将产生相同的数字序列.

您在每次迭代中创建了一个新的随机数生成器,然后获取该序列的第一个值.由于随机数发生器是相同的,它们序列的第一个值是相同的.我的解决方案将创建一个随机数生成器,然后返回序列的第一个,第二个......等值(将是不同的).


Dan*_*ung 6

我找到了一个中文页面,上面写着和时间一样的:http : //godleon.blogspot.hk/2007/12/c.html,它说如果你这样输入:

Random random = new Random(Guid.NewGuid().GetHashCode());

即使在循环中,您也可能会得到一个随机数!它也解决了我的问题!