0

下面的代码是从一篇论文中复制而来的,本科生的工作是从一个维基百科页面链接到的。我相信我在论文和代码中发现了一些缺陷,但由于我没有 C# 经验,我只想仔细检查。

我的理解是,这段代码旨在创建一个大的伪完全随机数,但我相信它会创建一个大数字,这是一个重复出现的较小随机数。IE。123123123 而不是 123784675。有人可以确认代码的作用。

我在这里读到的http://csharpindepth.com/Articles/Chapter12/Random.aspx和 Stackoverflow 上的各种帖子让我相信它使用相同的种子,因此每次迭代都得到相同的数字,只是在和上附加相同的数字超过。

Random randomNumber = new Random();
counter = 0;

for (int j = 0; j < 1; j++)
{
    StringBuilder largeRandomNumber = new StringBuilder();
    for (int i = 0; i < 40000; i++)
    { 
        int value = randomNumber.Next(11111, 99999);
        largeRandomNumber.Append(value); 
    }
}
4

5 回答 5

1

创建随机实例并循环使用 random.Next(int min, int max) 创建下一个随机数并将其附加到字符串的末尾。从本质上讲,它只是为某事创造了一个巨大的数字。外循环是垃圾,根本不需要。Random 在创建后不需要再次播种...保持相同的种子并使用 Next 方法正确进行。有关此代码的所有内容都“有效”,但除了了解随机类之外,在任何应用程序中似乎都毫无意义。

于 2013-10-21T22:53:58.590 回答
1

代码很好。

在这里试试:http: //www.compileonline.com/compile_csharp_online.php

using System.IO;
using System;
using System.Text;

class Program
{
    static void Main()
    {
       Random randomNumber = new Random();

       for (int j = 0; j < 1; j++)
       {
           StringBuilder largeRandomNumber = new StringBuilder();    

           for (int i = 0; i < 40; i++)
           { 
               int value = randomNumber.Next(11111, 99999);
               Console.WriteLine(value); 
            }
        }
    }
}
于 2013-10-21T22:55:00.267 回答
1

它是正确的。是的,Seed 是相同的,但这条线将确保您在不同的运行中获得不同的数字:

int value = randomNumber.Next(11111, 99999);

并且由于您将此数字附加到字符串以创建大的随机数,因此这可以完成它应该做的事情。

于 2013-10-21T22:57:23.243 回答
0

是的,如果连续快速调用它很可能会生成相同的数字,因为 Random 是用当前时间播种的。但是,除非他们randomNumber在循环内实例化实例,否则出于示例的目的,它可以正常工作。

例如,如果将代码插入到这样的函数中

    public string GetLargeRandomNumber()
    {
        Random randomNumber = new Random();
        StringBuilder largeRandomNumber = new StringBuilder();

        for (int j = 0; j < 1; j++)
        {
            for (int i = 0; i < 40000; i++)
            {
                int value = randomNumber.Next(11111, 99999);
                largeRandomNumber.Append(value);
            }
        }
        return largeRandomNumber.ToString();
    }

并从主函数快速连续调用,它将返回相同的随机数。

于 2013-10-21T22:52:05.030 回答
0

randomNumber正在建设中播种。randomNumber.Next正在根据初始种子返回两个给定整数之间的下一个随机整数,并且不会重新播种,因此会给出 40000 个新的随机数并附加它们。

不知道外循环是干什么用的,反正它只运行一次

于 2013-10-21T22:52:29.660 回答