我正在创建一个随机函数,给我四个随机值A,B,C,D和符号(+, - )。问题是代码生成所有相同的值,并且我得到的输出只有A = B = C = D = x其中x是代码生成的任何随机值。此外,我试图把断点和调试它,它没有问题,但一旦我删除断点,同样的问题发生。谁能告诉我哪里出错了。代码如下:
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;
}
答案 0 :(得分:1)
您应该只有一个 Random
的实例,最好是整个程序。
Random
时会自动为其添加基于时间的值:
使用与时间相关的默认种子值初始化Random类的新实例。
https://msdn.microsoft.com/en-us/library/h343ddh9(v=vs.110).aspx
问题是,您创建这四个实例的速度比此基于时间的值的解析速度快。因此,所有四个实例都以相同的值播种。当使用相同的参数调用时,每个参数都将返回相同的值。
由于这样的竞争条件,如果可能的话,你应该只保留一个Random的全局实例。
答案 1 :(得分:1)
使用一个实例并致电.Next
。您的问题是所有Random
个实例的种子都是相同的(它默认为基于时间的种子)。
实现只是一种算法,需要一个起始值来开始导出其他随机的"价值来自。它根本不是随机的,你可以弄清楚知道种子和所用算法的价值。
答案 2 :(得分:1)