C# Random随机数在循环出现重复数值解决办法

/ 0评 / 0

刚才正在做着C#题目,突然发现一个小问题的出现

我发现它的概率都是一样的,这就很奇怪,我检查代码发现这里肯定出了问题

for (int i = 0; i < 3; i++)
{
    voteSum += vote[i] = new Random().Next(10) + 1;
}

这段程序中在这里我用for循环录入了三个随机数进去,但是很显然,这三个随机数总是一模一样的

在查询资料后我得知,C#之所以在循环里面会出现随机数相同的问题,这是因为生成随机数的时候,计算时间太快导致的问题,如何去解决这里也很简单,只需要在上述代码Random括号里面添加上Guid.NewGuid().GetHashCode()

for (int i = 0; i < 3; i++)
{
    voteSum += vote[i] = new Random(Guid.NewGuid().GetHashCode()).Next(10) + 1;
}

这里也给出一下另一个解决方案吧,那就是给循环加一个延迟(这样显然很拖慢运行速度,不建议,仅仅只是提出)

for (int i = 0; i < 3; i++)
{
    voteSum += vote[i] = new Random().Next(10) + 1;
    Thread.Sleep(100);
}

延迟的方法外部空间还需要调用using System.Threading;即可

整个程序的代码如下

string[] names = new string[3];
int[] vote = new int[3];
int voteSum = 0;
Console.WriteLine("请输入三位候选人名字:");
for (int i = 0; i < 3; i++)
{
    Console.Write("第{0}位候选人:", i + 1);
    names[i] = Console.ReadLine();
}
for (int i = 0; i < 3; i++)
{
    voteSum += vote[i] = new Random(Guid.NewGuid().GetHashCode()).Next(10) + 1;
}
Console.WriteLine("姓名\t得票数\t支持率");
for (int i = 0; i < 3; i++)
{
    Console.WriteLine("{0}\t{1}\t{2}", names[i], vote[i], ((double)vote[i] / voteSum).ToString("P2"));
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注