Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 随机代码不能正常工作_C#_Random_Windows Phone 8.1 - Fatal编程技术网

C# 随机代码不能正常工作

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

我正在创建一个随机函数,给我四个随机值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;
    }
您应该只有一个
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,所以谢谢:-)