gpt4 book ai didi

c# - 为什么这个方法每次都返回相同的随机字符串?

转载 作者:太空狗 更新时间:2023-10-29 22:02:25 24 4
gpt4 key购买 nike

我需要创建一个独特的行 block 来测试我正在处理的不同项目。

所以我创建了一个简单的程序来生成 X 长度的随机字符串。

问题是,如果我调用它一次,我会得到一个随机字符串,如果我再次调用它(例如在 for 循环中),我会在整个循环执行过程中得到相同的字符串。

我感觉它被缓存了或什么的,但我不知道 .net 这样做了,我现在很困惑。

调用代码:

    StreamWriter SW = new StreamWriter("c:\\test.txt");
int x = 100;
while (x >0)
{
SW.WriteLine(RandomString(20));
x--;
}

方法如下:

private static string RandomString(int Length)
{
StringBuilder sb = new StringBuilder();
Random randomNumber = new Random();

for (int i = 0; i <= Length; ++i)
{
int x = randomNumber.Next(65, 122);
sb.Append(Convert.ToChar(x));
}
return sb.ToString();
}

这是输出:

"VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
..................
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB"

那么是什么让我认为 Random.next() 总是会返回一个新的随机数?

最佳答案

您创建的 Random 实例在时间上太接近了。每个实例都使用系统时钟初始化,并且由于时钟没有改变,您一遍又一遍地获得相同的随机数序列。

创建 Random 类的单个实例并反复使用它。

使用 using 关键字,以便 StreamWriter 在您使用完后关闭并释放。如果使用 for 关键字,循环代码更容易识别。

using (StreamWriter SW = new StreamWriter("c:\\test.txt")) {
Random rnd = new Random();
for (int x = 100; x > 0; x--) {
SW.WriteLine(RandomString(rnd, 20));
}
}

该方法将 Random 对象作为参数。

此外,使用长度以正确的容量初始化 StringBuilder,这样它就不必在循环期间重新分配。在循环中使用 < 运算符而不是 <=,否则您将创建一个比 length 参数指定的长一个字符的字符串。

private static string RandomString(Random rnd, int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int x = rnd.Next(65, 122);
sb.Append((char)x);
}
return sb.ToString();
}

关于c# - 为什么这个方法每次都返回相同的随机字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/807892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com