刚才正在做着C#题目,突然发现一个小问题的出现
我发现它的概率都是一样的,这就很奇怪,我检查代码发现这里肯定出了问题
for (int i = 0; i < 3; i++)
{
voteSum += vote[i] = new Random().Next(10) + 1;
}
这段程序中在这里我用for循环录入了三个随机数进去,但是很显然,这三个随机数总是一模一样的 在查询资料后我得知,C#之所以在循环里面会出现随机数相同的问题,这是因为生成随机数的时候,计算时间太快导致的问题,如何去解决这里也很简单,只需要在上述代码Random括号里面添加上Guid.NewGuid().GetHashCode() ```csharp
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));
}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
N0tssss' Note
本文地址: C# Random随机数在循环出现重复数值解决办法
本文地址: C# Random随机数在循环出现重复数值解决办法