在范围内生成随机双精度

时间:2010-09-09 21:15:41

标签: java random

我有两个双打,如下面的

double min = 100;
double max = 101;

并且使用随机生成器,我需要在min和max。

的范围之间创建一个double值
Random r = new Random();
r.nextDouble();

但这里没有任何内容可以指定范围。

7 个答案:

答案 0 :(得分:201)

要生成rangeMinrangeMax之间的随机值:

Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();

答案 1 :(得分:110)

在Java 7发布之前就提出了这个问题,但现在,使用Java 7(及更高版本)API还有另一种可能的方法:

int

nextDouble将在最小值(包含)和最大值(不包括)之间返回伪随机双精度值。边界不一定是double,可以是RewriteEngine On RewriteCond %{HTTP_HOST} ^(www.)?mysite.be$ RewriteRule ^(/)?$ folder [L] DirectoryIndex index.php

答案 2 :(得分:35)

使用此:

double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);

修改

new Random().nextDouble():随机生成0到1之间的数字。

start:开始号码,将号码“转移到右侧”

end - start:间隔。 Random给出了这个数字的0%到100%,因为random给你一个从0到1的数字。


编辑2: Tks @daniel和@aaa bbb。我的第一个答案是错的。

答案 3 :(得分:3)

import java.util.Random;
    public class MyClass {
         public static void main(String args[]) {
          Double min = 0.0; //  Set To Your Desired Min Value
          Double max = 10.0; //    Set To Your Desired Max Value
          double x = (Math.random() * ((max - min) + 1)) + min; //    This Will Create 
          A Random Number Inbetween Your Min And Max.
          double xrounded = Math.round(x * 100.0) / 100.0; // Creates Answer To 
          The Nearest 100 th, You Can Modify This To Change How It Rounds.
          System.out.println(xrounded); //    This Will Now Print Out The 
          Rounded, Random Number.
         }
    }

答案 4 :(得分:2)

希望,这可能会有所帮助:Random Number Generators in Java


共享一个完整的程序:

import java.util.Random;

public class SecondSplitExample
{
    public static void main(String []arguments)
    {
        int minValue = 20, maxValue=20000;
        Random theRandom = new Random();
        double theRandomValue = 0.0;
        
        // Checking for a valid range-
        if( Double.valueOf(maxValue - minValue).isInfinite() == false ) 
            theRandomValue = minValue + (maxValue - minValue) * theRandom.nextDouble();
        
        System.out.println("Double Random Number between ("+ minValue +","+ maxValue +") = "+ theRandomValue);
    }
}

这是 3 次运行的输出:

Code>java SecondSplitExample
Double Random Number between (20,20000) = 2808.2426532469476

Code>java SecondSplitExample
Double Random Number between (20,20000) = 1929.557668284786

Code>java SecondSplitExample
Double Random Number between (20,20000) = 13254.575289900251

了解详情:

答案 5 :(得分:1)

Random random = new Random();
double percent = 10.0; //10.0%
if (random.nextDouble() * 100D < percent) {
    //do
}

答案 6 :(得分:0)

random的主要思想是它返回一个伪随机值。 没有完全随机函数之类的东西,因此,在某些条件下,使用相同种子的2个随机实例将返回相同的值。

最好先查看功能文档以了解功能文档 (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html

现在我们了解到函数nextDouble()的返回值是0.0到1.0之间的伪随机值,我们可以利用它来发挥优势。

要在A和B之间创建一个随机数,以确保边界有效(A> B),我们需要: 1.找到A和B之间的范围,这样我们就可以知道我们有多少个“步骤”。 2.使用随机函数确定要执行的步骤(由于返回值介于0.0到1.0之间,因此您可以将其视为“选择随机增加的百分比” 3.添加偏移量

毕竟,我认为暴民为您提供了最简单,最常见的方式

double randomValue = rangeMin +(rangeMax-rangeMin)* r.nextDouble();

double RandomValue =偏移+(范围)*(0.0到1.0之间的randomVal)