![]() |
1
52
正如人们多次指出的那样,这样编写代码的建议是有问题的:
原因是构造函数
以下代码解决了此问题:
我用这两种方法编写了一个简单的程序,生成了25个1到100之间的随机整数。输出如下:
|
![]() |
2
65
要获得1到N(包括N)之间的随机整数值,可以使用以下方法。
|
![]() |
3
32
使用 System.Random :
|
![]() |
4
5
微软示例 Rnd Function https://msdn.microsoft.com/en-us/library/f7s023d2%28v=vs.90%29.aspx 1-初始化随机数生成器。
2-生成1到6之间的随机值。
|
![]() |
5
4
|
![]() |
6
2
到目前为止,所有的答案都有问题或错误(复数,而不仅仅是一个)。我会解释的。但首先,我想称赞Dan Tao的见解,他使用静态变量来记住Generator变量,这样多次调用它就不会一遍又一遍地重复相同的#,而且他给出了一个非常好的解释。但正如我现在解释的那样,他的代码与大多数其他代码一样存在缺陷。 MS让他们的Next()方法变得相当奇怪。Min参数是人们所期望的包含最小值,但Max参数是 独家 这是人们意想不到的最大值。换句话说,如果你传递min=1和max=5,那么你的随机数将是1、2、3或4中的任何一个,但它永远不会包括5。这是使用微软Random的所有代码中两个潜在错误中的第一个。Next()方法。 对于a 简单的 回答(但仍有其他可能但罕见的问题),然后您需要使用:
(我喜欢用
我认为这种方法有两个潜在的问题,但它适用于(并且正确)大多数用途。如果你想要一个 简单的 解决方案,我相信这是正确的。 我看到这个函数只有两个问题: 1:当Max=Int32.MaxValue时,加1会产生数值溢出。虽然这种情况很少见,但仍然有可能。 2:当min>最大值+1。当min=10且max=5时,Next函数会抛出错误。这可能是你想要的。但也可能不是。或者考虑当min=5和max=4时。通过添加1,5被传递给Next方法,但它不会抛出错误,当它真的是一个错误时,而是微软。我测试的NET代码返回5。因此,当最大值=最小值时,它真的不是“排他性”的最大值,而是当最大值<随机的最小值。Next()函数,然后抛出ArgumentOutOfRangeException。因此,微软的实现在这方面确实不一致,也存在漏洞。 当min>因此不会抛出错误,但这完全取决于所需的内容。如果你想在无效值上出错,那么最好在我们代码中微软的独占最大值(max+1)等于最小值时抛出错误,在这种情况下,微软不会出错。 处理max=Int32.MaxValue时的变通方法有点不方便,但我希望发布一个全面的函数来处理这两种情况。如果你想要不同于我编码的行为,那就随你便。但要注意这两个问题。 编码愉快! 编辑: 所以我需要一个随机整数生成器,我决定对其进行“正确”编码。所以,如果有人想要完整的功能,这里有一个真正有效的。(但它只需要2行代码就不会赢得最简单的奖项。但它也不太复杂。)
|
![]() |
7
1
您应该只创建一次伪随机数生成器:
然后,如果一个整数满足您的需求,您可以使用:
随你喜欢的次数。使用包装器函数是合理的,只是因为最大值是排他性的——我知道随机数是这样工作的,但定义是。接下来是令人困惑的。 在我看来,每次需要一个数字时都创建一个生成器是错误的;伪随机数不以这种方式工作。 首先,您会遇到其他回复中讨论过的初始化问题。如果初始化一次,则不会出现此问题。 其次,我完全不确定你是否得到了一个有效的随机数序列;相反,你会得到一个基于计算机时间自动播种的多个不同序列的第一个集合。我不确定这些数字是否会通过验证序列随机性的测试。 |
![]() |
8
1
如果你使用的是约瑟的答案,这是一个很好的答案,你可以这样背对背地运行这些:
然后,结果可能会一遍又一遍地返回,因为它处理呼叫的速度很快。这在08年可能不是问题,但由于处理器现在快得多,该函数不允许系统时钟在进行第二次调用之前有足够的时间进行更改。 自系统以来。Randomy()函数基于系统时钟,我们需要留出足够的时间在下一次调用之前对其进行更改。实现这一点的一种方法是暂停当前线程1毫秒。请参阅以下示例:
|
![]() |
9
0
|
![]() |
10
0
仅供参考,RND和RANDOMIZE的VB NET函数定义(应给出与BASIC(1980年)及其后所有版本相同的结果)为:
而随机类是:
|
![]() |
11
-5
我看到很多用户对使用不满意
尽管我个人仍然会使用
请注意,这只是一个小小的思维实验。我没有测试性能,也没有调查结果的实际“随机性”。但就你的目的而言,它可能只是完成了工作。
公认的答案使用
|
![]() |
Giampaolo Levorato · 大熊猫随机分层抽样 11 月前 |
![]() |
jenstar · excel-如何使用randbetween选择整行 11 月前 |
![]() |
ssm1020 · R中循环采样中的神秘错误 1 年前 |
![]() |
C0untV · 随机数生成器返回重复值 1 年前 |
![]() |
Yago · Haskell中随机数生成的参数化界 1 年前 |
![]() |
Andrew Kornder · 选择按位操作序列 1 年前 |
|
mani ch · Python:反向猜谜游戏 1 年前 |