C# 无法确定随机性与代码问题

C# 无法确定随机性与代码问题,c#,random,do-while,C#,Random,Do While,在这种情况下,我无法判断随机数生成器是否有问题 Random x = new Random(); do { a = x.Next(1, 200); aa = x.Next(1, 200); b = x.Next(a + 1, 200); bb = x.Next(aa + 1, 200); Console.WriteLine(a + " " + aa + " " + b + " " + bb); } while (a != aa || b != b

在这种情况下,我无法判断随机数生成器是否有问题

Random x = new Random();
do
{
    a = x.Next(1, 200);
    aa = x.Next(1, 200);
    b = x.Next(a + 1, 200);
    bb = x.Next(aa + 1, 200);
    Console.WriteLine(a + " " + aa + "     " + b + " " + bb);

} while (a != aa || b != bb);
我在比较两对随机数相同时,当它们相同时,我想知道这些数字是什么。出于某种原因,它们最终总是在150-200之间。这对我来说还不够随机

基本上我是在模拟2号彩票中奖需要多长时间


这是因为Random类不够随机,还是代码有问题?

您的代码没有做您认为它正在做的事情。首先,无论是
a
还是
b
都不会是56,因为。其次,如果
a
是54,
b
将始终是55。因此,
a
b
分别为54和55的概率是56分之一,但这一概率应该只有3136分之一


更新:此答案适用于问题的先前版本。一旦事情稳定下来,我会用最后一个问题的答案来更新它。

您的代码没有做您认为它正在做的事情。首先,无论是
a
还是
b
都不会是56,因为。其次,如果
a
是54,
b
将始终是55。因此,
a
b
分别为54和55的概率是56分之一,但这一概率应该只有3136分之一


更新:此答案适用于问题的先前版本。一旦事情稳定下来,我会用最后一个问题的答案来更新它。

随机类的随机性没有问题,至少不会影响代码

你选择彩票号码的方式是错误的。您选择的第一个数字本身具有正确的分布,但随后您选择的另一个数字要高于第一个数字,这将有利于范围内的更高数字

此外,当第一个数字较高时,它更有可能猜测第二个数字,因为变化较小。在你的猜测中,你会在较高的数字中看到相当多的点击率


除此之外,看起来还不错。确定一个数字的猜测频率并没有任何线性分布。你很少会很早就猜到正确的答案,你也很少会很长时间都猜不到正确的答案。在特定数量的猜测周围出现集中是正常的。

随机类的随机性没有问题,至少不会影响代码

你选择彩票号码的方式是错误的。您选择的第一个数字本身具有正确的分布,但随后您选择的另一个数字要高于第一个数字,这将有利于范围内的更高数字

此外,当第一个数字较高时,它更有可能猜测第二个数字,因为变化较小。在你的猜测中,你会在较高的数字中看到相当多的点击率



除此之外,看起来还不错。确定一个数字的猜测频率并没有任何线性分布。你很少会很早就猜到正确的答案,你也很少会很长时间都猜不到正确的答案。你在特定数量的猜测周围看到一种专注是很正常的。

我很困惑。。。150-200的范围是多少?在我看来,这些值中的所有4个总是在1-56范围内。添加到@liho1eye,当你说150到200时,你是在添加这四个数字吗?我之前将其设置为最大值200,只是在代码中更改了它。我也很困惑为什么你有两对。。。第二对(
b
-
bb
)当然更有可能最终匹配,因为它总是在较小的范围内工作。@Liger86我们得到了,但不确定为什么。我很困惑。。。150-200的范围是多少?在我看来,这些值中的所有4个总是在1-56范围内。添加到@liho1eye,当你说150到200时,你是在添加这四个数字吗?我之前将其设置为最大值200,只是在代码中更改了它。我也很困惑为什么你有两对。。。第二对(
b
-
bb
)当然更可能以匹配结束,因为它总是在较小的范围内工作。@Liger86我们得到了,但不确定为什么。在我的代码中,我几乎从未得到两对小于100的值。使用新代码,你应该得到
a
b
都在100以下,大约4次中有1次。我刚才运行了大约15次程序,所有这些时间最后一对都超过100,需要截图吗?你又更改了代码吗<代码>b=x.Next(a+1200)不应该是
b=x.Next(1200)?!因此,如果
b
小于
a
,则交换它们。但是你正在做的是改变分布。好吧,在我的代码中,我几乎从来没有得到两个小于100的对。使用新代码,你应该得到
a
b
都小于100,大约四次中有一次。我刚才运行了大约15次程序,所有这些时间最后的对都超过100,需要截图吗?你又改代码了吗<代码>b=x.Next(a+1200)不应该是
b=x.Next(1200)?!因此,如果
b
小于
a
,则交换它们。但是你所做的是改变分布。我把我的随机数建立在兆百万的基础上,在兆百万的基础上,只有最后的第六个球会得到一个全新的随机值,但例如第二个数字总是比第一个数字大,这就是困惑的地方…但我不明白为什么我几乎从来没有得到100或100以下的数字,或者我问这个问题是多余的吗?我有点困惑。@Liger86:他们在挑选数字后对它们进行排序,这就是为什么它们会按顺序排列。我将我的随机数建立在类似于百万富翁的基础上,在百万富翁中,只有最后的第六个球会得到一个全新的随机值,但例如,第二个数字是alwa