以下代码是从纸上复制的,本科作品是从维基百科页面链接的。我相信我发现了论文中的一些缺陷和代码中的一些缺陷,但由于我没有C#经验,我只想仔细检查。
我的理解是这段代码的目的是创建一个大的伪随机数,但相信它会创建一个大数字,这是一个重新固定的较小的随机数。 即。 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);
}
}
答案 0 :(得分:1)
通过使用random.Next(int min,int max)创建下一个随机数,创建随机和循环实例,并将其附加到字符串的末尾。从本质上讲,它只是创造了一个巨大的数字。外环是垃圾,根本不需要。创建后随机不需要再次播种...使用Next方法保持相同的种子并正确进行。关于这段代码的一切都“有效”,但除了学习随机类之外,在任何应用程序中似乎都没有意义。
答案 1 :(得分: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);
}
}
}
}
答案 2 :(得分:1)
这是对的。是的,种子是相同的,但这一行将确保你在不同的运行中得到不同的数字:
int value = randomNumber.Next(11111, 99999);
并且由于您要将此数字附加到字符串以创建大型随机数,因此可以执行此操作。
答案 3 :(得分:0)
是的,如果连续快速调用,它很可能会生成相同的数字,因为随机播种当前时间。除非他们在循环中实例化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();
}
从主函数快速连续调用它将返回相同的随机数。
答案 4 :(得分:0)
randomNumber
播种于construction。 randomNumber.Next
基于初始种子返回两个给定整数之间的下一个随机整数,并且不重新种子,从而提供40000个新随机数并附加它们。
不确定外循环是什么,它只运行一次