结果令人印象深刻。每个人差不多50%,但这个过程是我担心的。有时我会卷成10个或卷成8个零。我在那个时期考虑的并不是真正的随机性。我想避免这种情况,只允许大多数3次重复序列。对此有一个很好的建议吗?
int resetOne = 0;
int resetZero = 0;
Random ran = new Random();
while (y < 100) {
y++;
x = ran.nextInt(2);
if (x == 1) {
resetOne++;
resetZero = 0;
if (resetOne == 3) {
x = ran.nextInt(2);
}
oneCounter++;
} else if (x == 0) {
resetZero++;
resetOne = 0;
if (resetZero == 3) {
x = ran.nextInt(2);
}
zeroCounter++;
}
System.out.println(x);
System.out.println("0 = " + zeroCounter + " " + "1 = " + oneCounter);
}
答案 0 :(得分:2)
真正的随机性可以连续出现1万次。它不会可能,但它可以。所以我强烈建议重新调整你的期望。
如果你真的想要有偏见的随机性 - 逐渐减少“公平”的硬币翻转 - 你需要通过跟踪最近的结果并调整你的概率来自己实现。
答案 1 :(得分:1)
作为我回答之前的一个注释,如果我可以预测下一个数字是什么,它实际上并不是随机的。在你的情况下,如果我连续三个0,我100%确定下一个数字将是1。
现在,实现所要求的最简单方法就是引入两个新变量:一个在结果发生变化时重置的计数器,以及一个最后返回值的缓存。如果计数器在某行中允许的最大值(连续三个0),则只返回另一个数字并重置计数器(并将此返回值存储在lastReturned缓存中)。
这应使您的分布接近50%标记,因为它应该大约相等地发生1和0。它应该很容易测试出来进行验证。