在Java中生成随机双精度

在Java中生成随机双精度,java,double,Java,Double,我是一个JavaNoob,试图生成一个介于-10和10之间的随机双精度。我知道使用ints时,我会执行以下操作: Random r = new Random(); int i = -10 + r.nextInt(21); 但是,对于双打,这不起作用: Random r = new Random(); double i = -10 + r.nextDouble(21); 有人能解释一下双打怎么办吗 返回此随机数生成器序列中0.0和1.0之间的下一个伪随机、均匀分布的双精度值 nextDo

我是一个JavaNoob,试图生成一个介于-10和10之间的随机双精度。我知道使用ints时,我会执行以下操作:

Random r = new Random(); 
int i = -10 + r.nextInt(21);
但是,对于双打,这不起作用:

Random r = new Random(); 
double i = -10 + r.nextDouble(21); 
有人能解释一下双打怎么办吗

返回此随机数生成器序列中0.0和1.0之间的下一个伪随机、均匀分布的双精度值

nextDouble不接受参数,您只需要将它乘以您的范围。或者更一般地说:

minimum + (maximum - minimum) * r.nextDouble();

Random
中没有
nextDouble(int)
方法。使用以下命令:

double i = -10.0 + r.nextDouble() * 20.0; 

尝试使用此选项生成给定范围内的值:

Random random = new Random();
double value = min + (max - min) * random.nextDouble();
或者尝试使用以下方法:

public double doubleRandomInclusive(double max, double min) {
   double r = Math.random();
   if (r < 0.5) {
      return ((1 - Math.random()) * (max - min) + min);
   }
   return (Math.random() * (max - min) + min);
}
public双倍随机(双倍最大值,双倍最小值){
double r=Math.random();
if(r<0.5){
返回((1-Math.random())*(max-min)+min);
}
返回值(Math.random()*(max-min)+min);
}
试试这个:

    Random r = new Random(); 
    double d = -10.0 + r.nextDouble() * 20.0; 

注意:它应该是20.0(而不是21.0)

nextDouble()从0.0d(包含)返回到1.0d(排除),因此它永远不能返回
max
值。@Pshemo答案已更新。+1我喜欢这个“hack”,尽管0和1以外的数字随机的几率要高出两倍:)@Pshemo谢谢…>|第一套最适合我,只是因为它简单。我建议将此替换为此问题的正确答案。错误,这可能会给出超过10.0的值
I
将在[-10;10)。它说21,我想你编辑了它?谢谢!只是好奇,为什么它应该是20而不是21?在int示例中它也应该是20吗?因为否则最小值是
-10+0.0*20.0
(-10.0),最大值是
-10+1.0*21.0
(11.0)…而int示例确实应该是
nextInt(21)
因为此方法的
随机
文档说明nextInt返回一个介于0(包含)和指定值(排除)之间的整数值。您对这个答案满意吗?这将永远不会返回10,因为
nextDouble()
不能返回1。
-10.0+0.999…*20.0!=10
是的,这很有意义,再次感谢!