【问题标题】:For loop advancing too quickly without generating random strings properly [duplicate]For循环推进太快而没有正确生成随机字符串[重复]
【发布时间】:2016-08-11 22:52:25
【问题描述】:

所以我编写了一个快速程序来测试在 foreach 语句中检查布尔值与在循环外的条件语句中检查布尔值会产生多大的差异(在处理速度方面)。为了测试这一点,我让一个函数生成随机字符串并将它们添加到一个列表中,但是生成字符串的 for 循环似乎推进得太快而没有在重复中生成不同的字符串。为了解决这个问题,我添加了一个Thread.Sleep(15)(15 毫秒似乎是在每次重复中生成不同字符串所需的最小值)。

我的问题是:没有Thread.Sleep(15) 是否可以解决此问题?在每次重复之间等待 15 毫秒,这样程序就会花费更多的时间来运行,这使得它的目的非常不切实际(如果我想获得统计相关的数据,我必须运行它大约 10000 次对于每个选项(“好”和“坏”方式))。这是有问题的 for 循环:

for (int i = 0; i < 1000; i++) {

                var stringChars = new char[8];
                var random = new Random();

                for (int n = 0; n < stringChars.Length; n++)
                {
                    stringChars[n] = chars[random.Next(chars.Length)];
                }

                var finalString = new String(stringChars);
                data.Add(finalString);
                Thread.Sleep(15);
        }

【问题讨论】:

  • 您应该在for 循环之外创建Random()
  • 谢谢!完美运行。我会尽快接受答案。

标签: c# for-loop random


【解决方案1】:

您遇到的问题是每次迭代循环时都在重新创建 Random 类。

这是一个问题的原因是因为Random 类的默认种子是当前系统时间戳,在重复迭代时很可能是相同的值。

for 循环之外创建Random 将确保按照您的预期生成伪随机序列。

试试这个:

var random = new Random();

for (int i = 0; i < 1000; i++) {
    var stringChars = new char[8];

    for (int n = 0; n < stringChars.Length; n++)
    {
        stringChars[n] = chars[random.Next(chars.Length)];
    }

    var finalString = new String(stringChars);
    data.Add(finalString);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多