java - 随机数生成器表现得很奇怪

标签 java random

我想要一个范围从 0 到 3 的随机数,并尝试了以下代码只是为了看看它是如何工作的。

int[] count = new int[4];

    for (int i = 0; i < 1000; i++) {
        int t = (int)(Math.round((Math.random() *3)));

        count[t] +=1;

    }


    for (int i = 0; i < count.length; i++) {
        System.out.println(count[i]);

    }

现在奇怪的是,0 和 3 命中的次数大约是 1 和 2 命中次数的一半,这怎么可能?

最佳答案

查看舍入到每个整数的间隔:

|----+----|----+----|----+----|
0         1         2         3

<...>
Rounds to 0
     <........>
     Rounds to 1
               <........>
               Rounds to 2
                         <....>
                         Rounds to 3

您可以看到舍入到 0 和 3 的范围是其他范围的一半,因此如果您统一选择,则命中它们的频率就会减半。

关于java - 随机数生成器表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318968/

相关文章:

java - 单元测试期间未扫描 JPA 实体

java - 如何在 Java 中从 JPEG 中读取 XMP 人脸数据

java - 检测点击按钮的位置

java - 生成总和为 1 的 N 个数字

c++ - 在单个程序中初始化多个 rng

python - 如何搜索单个整数的范围?

java - 在 Mac OS X 上增加 SQuirreL SQL 的堆大小

java - 如何唯一标识两个结果集是否相等?

java - 如何在两个不同点之间绘制移动动画线

c++ - 我需要访问一个小文本文件的完全随机行,并在 C++ 中的另一个文本文件中导入同一行