以下程序应该取两个双A和B,然后给出一个随机数。
我知道如果我做Math.random
,程序会给我0和1。
然后我会用你输入的两个数字相乘,但如果我输入10和20,我总是得到20.068104910282108。
我该如何解决?
import java.util.Scanner;
public class Slembibil {
public static void main (String[] args) {
Scanner in = new Scanner(System.in);
double a = 0.0;
double b = 0.0;
System.out.println("Please be so kind and add in your first number which you wish to see the random values of.");
a = in.nextDouble();
System.out.println("Now the second one.");
b = in.nextDouble();
double r = (double)(Math.random()*a + b);
System.out.println("Here's your random number:" + r);
in.close();
}
}
答案 0 :(得分:1)
如果您要做的是在a
和b
之间获取一个随机数,请尝试:
double r = Math.random() * Math.abs(a - b) + Math.min(a, b);
或者,如果您确定b
大于a
:
double r = Math.random() * (b - a) + a;
编辑:实际上第二个版本即使是>也可以使用b ...
答案 1 :(得分:1)
尝试在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());
}
这比仅使用当前时间更好。
答案 2 :(得分:0)
您也可以使用功能:
double randomWithRange(double min, double max)
{
double range = Math.abs(max - min);
return (Math.random() * range) + (min <= max ? min : max);
}