2017-10-18 74 views
4

我使用Java的随机生成随机数:1.0,1.1 - 10Java的随机()四舍五入

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); 
+0

你生成了多少个数字? – osanger

+0

对不起,我生成了2000个数字,并重复了至少20次。这就是为什么我注意到 – RichardB

+0

,你想生成1.1和10之间的数字? – osanger

回答

1

要产生1.1和10使用之间的随机值下面的代码:

double min = 1.1d; 
    double max = 10d; 
    Random r = new Random(); 
    double value = min + (max - min) * r.nextDouble(); 

Afterwarsds可以使用Math.floor(value)太圆你的结果

1

这个前提

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

是错误的。您生成从10到100的随机整数。较低的分数和四舍五入的值不会影响它。随机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[] 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]); 

    } 

看从代码的结果的10个100个值似乎上来如经常任何其他。

+0

所以你说这只是随机的,我有连续20次这些结果?如果我将它运行100次以上,我会与2.1或8.5相同? – RichardB

+0

检查我的编辑;如果您担心分割和映射从整数到双倍,它可能会错过一点。我们不应低估人们在查看数据时所做的“解释”。我不相信你最初的方法是错误的! – Adam

+0

搞笑如何结果告诉我,10次甚至已经产生了最多的这一次...你不能'随机'击败... – RichardB