C# 随机代码不能正常工作
我正在创建一个随机函数,给我四个随机值a、B、C、D和符号(+、-)。问题是代码生成了所有相同的值,而我得到的输出只有A=B=C=D=x,其中x是代码生成的任意随机值。我还试着设置一个断点并调试它,它工作得很好,没有问题,但一旦我删除断点,同样的问题就会发生。谁能告诉我哪里出了问题。代码如下:C# 随机代码不能正常工作,c#,random,windows-phone-8.1,C#,Random,Windows Phone 8.1,我正在创建一个随机函数,给我四个随机值a、B、C、D和符号(+、-)。问题是代码生成了所有相同的值,而我得到的输出只有A=B=C=D=x,其中x是代码生成的任意随机值。我还试着设置一个断点并调试它,它工作得很好,没有问题,但一旦我删除断点,同样的问题就会发生。谁能告诉我哪里出了问题。代码如下: public void RandomQuestionGenerate() {//all the variables(A,B,C,D,sign1,sign2) are globally define
public void RandomQuestionGenerate()
{//all the variables(A,B,C,D,sign1,sign2) are globally defined
Random FirstNo = new Random();
A = FirstNo.Next(0, 10);
Random SecondNo = new Random();
TextA.Text = A.ToString();
B = SecondNo.Next(0, 10);
Random ThirdNo = new Random();
TextB.Text = B.ToString();
C = ThirdNo.Next(0, 10);
Random FourthNo = new Random();
TextC.Text = C.ToString();
D = FourthNo.Next(0, 10);
TextD.Text = D.ToString();
Random FirstSign = new Random();
int x = FirstSign.Next(0, 2);
if(x == 0)
{
Sign1 = "+";
}
else if(x == 1)
{
Sign1 = "-";
}
TextSign1.Text = Sign1;
Random SecondSign = new Random();
int y = SecondSign.Next(0, 2);
if (y == 0)
{
Sign2 = "+";
}
else if (y == 1)
{
Sign2 = "-";
}
TextSign2.Text = Sign2;
}
您应该只有一个Random
实例,最好是针对整个程序
使用默认构造函数创建时,Random
将自动使用基于时间的值作为种子:
使用与时间相关的默认种子值初始化Random类的新实例
问题是,您创建这四个实例的速度比基于时间的值的解析速度要快。因此,所有四个实例都使用相同的值进行种子设定。当使用相同的参数调用时,每个参数将返回相同的值
由于这样的竞争条件,如果可能,您应该只保留一个全局随机实例 使用一个实例并调用
.Next
。您的问题是所有这些随机实例的种子都是相同的(默认为基于时间的种子)
该实现只是一个算法,需要一个起始值来开始从中派生其他“随机”值。它完全不是随机的,您可以通过知道种子和使用的算法来计算出值。不要每次都创建一个新的随机
实例
保留一个Random
实例,并为每个新的随机数调用Next()
有关更多详细信息,请参阅。您需要将种子传递给随机构造函数。Random
不是真正的Random
,除非它是种子,通常您可以使用Random rnd=new Random((int)DateTime.Now.Ticks)代码>或在两次运行之间获取唯一编号的内容。但正如你的其他评论所说,你不应该每次需要一个新号码时都创建一个新的Random
类。只要重复使用相同的Random并调用。下一步(0,10)
。不需要这么多的东西,你完全错了。请参考默认随机构造函数的MSDN条目。非常感谢,只要我只使用了一个随机函数,它就工作得很好。你想评论一下吗?这个答案对我来说似乎是对的。@NielsFilter我怀疑是不知道如何咨询MSDN的人。@Downvoter通常我会要求发表评论,但你帮了我的强迫症,让我的代表返回到0或5,所以谢谢:-)