Java Random()舍入

Java Random()舍入,java,random,Java,Random,我使用Java的Random生成随机数:1.0、1.1-10 Random random = new Random(); return (double) ((random.nextInt(91) + 10) / 10.0); 当我打印了很多这些数字(2000年)时,我注意到1.0和10的打印量明显少于所有其他数字(重复20次,每次都发生)。很可能是因为没有生成0.95-0.99和10.01-10.04 现在我已经读了很多关于这方面的文章,但它仍然留给我以下问题: 例如,如果这些数字代表等级,你

我使用Java的Random生成随机数:1.0、1.1-10

Random random = new Random();
return (double) ((random.nextInt(91) + 10) / 10.0);
当我打印了很多这些数字(2000年)时,我注意到1.0和10的打印量明显少于所有其他数字(重复20次,每次都发生)。很可能是因为没有生成0.95-0.99和10.01-10.04

现在我已经读了很多关于这方面的文章,但它仍然留给我以下问题:

例如,如果这些数字代表等级,你不能得到低于1和高于10的分数,那么将范围从0.95扩大到10.04是否合法

Random random = new Random();
return Double.valueOf((1005-95) / 100);

要生成介于1.1和10之间的随机值,请使用以下代码:

  double min = 1.1d;
  double max = 10d;
  Random r = new Random();
  double value = min + (max - min) * r.nextDouble();
战后你可以使用
数学下限(值)
对你的结果进行过多的调整

这个前提

最有可能是因为0.95-0.99和10.01-10.04不是 生成

这是错误的。生成从10到100的随机整数。较低的分数和值的四舍五入不起作用。Random nextInt在区间内是随机的;终审案件不受歧视

我认为你的方法

Random random = new Random();
return (double) ((random.nextInt(91) + 10) / 10.0);
看起来不错。我建议你测量你正在经历的异常,也许这是一种人类的偏见,当你仅仅看输出的时候

下面是一些代码,用于测量91个值的实际随机生成。这是在转换为不理想的双精度之前。(但我不认为除以10除了映射值10->1.0、11->1.1…99->9.9和100->10.0之外还有什么作用。对最终结果的度量当然更可取)

Random Random=new Random();
int[]度量值=新的int[101];
对于(int i=0;i<10000;i++){
整数=(random.nextInt(91)+10);
测量[数字]+;
}
对于(int i=0;i<101;i++){
System.out.println(i+“count:”+度量值[i]);
}

查看该代码的结果,10和100的值似乎与其他值一样频繁出现。

您生成了多少个数字?哦,对不起,我生成了2000个数字,并重复了至少20次。这就是为什么我注意到了,你想要生成1.1到10之间的数字?是的,这就是我想要做的。根据,1.0和10.0的生成频率与其他的频率大致相同。所以你是说我连续20次得到这些结果是随机的?如果我运行它100倍以上,我会有相同的2.1或8.5?检查我的编辑;如果您担心整数到双精度的除法和映射,那么它可能会有点忽略这一点。我们不应该低估人类在查看数据时所做的“解释”。我不相信你最初的方法是错误的!搞笑的是,结果显示我这次最多生成了10个。。。你不能“击败”随机的。。。
    Random random = new Random();

    int[] measure = new int[101];
    for (int i = 0; i < 10000; i++) {

        int number =  (random.nextInt(91) + 10);
        measure[number]++;         

    }
    for (int i = 0; i < 101; i++) {

        System.out.println(i + " count: " + measure[i]);

    }