随机双程序没有按预期工作

时间:2015-09-09 12:22:20

标签: java

以下程序应该取两个双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();
    }
}

3 个答案:

答案 0 :(得分:1)

如果您要做的是在ab之间获取一个随机数,请尝试:

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);
}