Java 随机双程序是';他没有按预期工作

Java 随机双程序是';他没有按预期工作,java,Java,下面的程序应该取两个双A和B,并给出一个随机数 我知道如果我做Math.random程序会给我0和1 然后我将乘以你输入的双倍数,但如果我输入10和20,我总是得到20.068104910282108 我该如何解决这个问题 import java.util.Scanner; 公共类Slembil{ 公共静态void main(字符串[]args){ 扫描仪输入=新扫描仪(系统输入); 双a=0.0; 双b=0.0; System.out.println(“请友好地添加您希望看到随机值的第一个数字

下面的程序应该取两个双A和B,并给出一个随机数

我知道如果我做
Math.random
程序会给我0和1

然后我将乘以你输入的双倍数,但如果我输入10和20,我总是得到20.068104910282108

我该如何解决这个问题

import java.util.Scanner;
公共类Slembil{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
双a=0.0;
双b=0.0;
System.out.println(“请友好地添加您希望看到随机值的第一个数字。”);
a=in.nextDouble();
System.out.println(“现在是第二个”);
b=in.nextDouble();
double r=(double)(Math.random()*a+b);
System.out.println(“这是您的随机数:“+r”);
in.close();
}
}

如果您试图在
a
b
之间获得一个随机数,请尝试:

double r = Math.random() * Math.abs(a - b) + Math.min(a, b);
或者如果您确定
b
大于
a

double r = Math.random() * (b - a) + a;


编辑:实际上,即使a>b..,第二个版本也可以工作。

您还可以使用以下功能:

double randomWithRange(double min, double max)
{
   double range = Math.abs(max - min);     
   return (Math.random() * range) + (min <= max ? min : max);
} 
double randomWithRange(最小值加倍,最大值加倍)
{
双量程=数学绝对值(最大-最小);

return(Math.random()*range)+(min尝试在java中使用
random

Random random = new Random(System.currentTimeMillis()); // Using the time as a seed
double num = random.nextDouble() * (a + b);
System.out.println("Here's your random number: " + num);
@aioobe评论后的[编辑]

而是使用:

Random random = new Random();
因为默认构造函数如下所示:

public Random() {
    this(seedUniquifier() ^ System.nanoTime());
}

这比仅仅使用当前时间要好。

输入a=10和b=20的期望输出是什么?好吧,我得到了29.271998627562333。现在问题是什么?四个答案,完全不清楚你在问什么。你已经给出了一个实际输出的例子,但正如Simimmo所说,请将你所需的输出陈述为井(例如间隔
[a]中的随机数, b] 
(a,b]
[b,b+a]
,…)
数学。随机()将使用计算机中的某些东西来产生“随机”的结果。这些数字在不同的执行过程中可能是相同的,甚至每次都可能以相同的顺序出现(取决于一系列因素)…如果在同一个JVM中两次输出一个随机数,您将得到不同的数字。@NicholasRobinson,不幸的是,我认为“总是像…”意味着“作为一次运行的示例,我得到…”.但是,我重申-这个问题目前还不清楚,应该编辑或关闭,不要猜测和回答不好。这很有帮助!!!谢谢!不需要将时间用作种子。只使用
new Random()
可以更好地创建随机种子。