有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java随机类输出1或0

结果令人印象深刻。然而,每个人都有将近50%的人,我担心的是这个过程。有时我一卷得到10个1或者一卷得到8个0。我认为在那个时期不是真正的随机性。我想避免这种情况,只允许最多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);
    }

共 (2) 个答案

  1. # 1 楼答案

    在我回答之前请注意,如果我能预测下一个数字,它实际上不是随机的。在你的例子中,如果我连续得到三个0,我100%肯定地知道下一个数字将是1

    现在,实现您所要求的最简单的方法就是引入两个新变量:一个在结果更改时重置的计数器,以及一个最后返回值的缓存。如果计数器在一行中达到结果允许的最大值(一行中有三个0),则只需返回另一个数字并重置计数器(并将此返回值存储在lastReturned缓存中)

    这将使您的分布接近50%,因为它在1和0中的分布应该大致相同。它应该很容易测试出来验证

  2. # 2 楼答案

    真正的随机性可能会连续出现1万次。这不太可能,但它可以。因此,我强烈建议重新调整你的期望

    如果你真的想要有偏见的随机性,一个逐渐减少的“公平”投币,你需要通过跟踪最近的结果和调整你的概率来实现这一点