理解并修复了编程中的重复随机数
>>常见的编程问题涉及反复输出相同数字的随机数发生器(RNG)。 当RNG在循环中多次重新定位时,通常会发生这种情况。
Random
让我们以一个示例来检查这个问题:
在每个循环迭代期间,调试可能会显示不同的值。但是,在循环之后设置一个断点,揭示了
public static int RandomNumber(int min, int max) { Random random = new Random(); // Problem: New instance each time return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }
解决方案:一个随机实例mac
根本原因是在循环中创建一个新的对象。 由于经常使用系统时钟进行播种,因此在快速演替中创建多个实例会导致种子值相同,因此重复数字。
解决方案很简单:在整个代码中使用一个单一的静态实例:
Random
Random
多线程安全
>
在多线程应用程序中,访问共享的实例需要同步以防止比赛条件。 可以使用锁来实现:Random
以上是为什么我的随机数发生器反复产生相同的数字?的详细内容。更多信息请关注PHP中文网其他相关文章!