Java 随机双程序是';他没有按预期工作
下面的程序应该取两个双A和B,并给出一个随机数 我知道如果我做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(“请友好地添加您希望看到随机值的第一个数字
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()
可以更好地创建随机种子。