我有一个代表一枚硬币的类,可以使用 Coin.Flip() 方法翻转它。
Flip() 使用 random.Next(2);得到代表正面或反面的 0 或 1。这很好用……有点。
对于该程序,我需要有 2 个我制作的硬币,比如说 coin1 和 coin2。
coin2 总是需要在 coin1 之后直接翻转,我可以这样做:
coin1.Flip();
coin2.Flip();
那应该有效,对吧?
嗯,事实并非如此!每次我运行这两行代码时,两枚硬币最终都会获得相同的值!
面值存储在Coin类内部的face中,其定义如下:
private int face;
我不认为我所做的有任何问题,但每次运行代码时,它们最终都是相同的。
哦,另外,随机也是在 Coin 类中定义的,如下所示:
private Random random = new Random();
感谢您的帮助!
编辑:这是 Flip(),它现在可以工作,但随机是静态的。
public void Flip() {
face = random.Next(2);
}
随机数生成器需要种子值。具有相同种子的 RNG 将产生相同的随机数流。
默认情况下,System.Random 使用当前时间作为种子。如果您几乎立即创建两个实例,它们可能都具有相同的时间值,因此将产生相同的随机数序列。
您可以将 Random 移动到静态成员,以便所有 Coin 共享相同的 RNG,但请注意 System.Random 没有记录为线程安全的,因此您不能在没有同步的情况下在不同线程上使用多个 Coin。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)