3

我试图找出一种方法来生成 1/2 和 -1/2 之间的随机值。

我尝试了以下方法,但不确定这是否是正确的方法......

有人可以让我知道实现这一点的好方法吗?

public static void main(String args[]) {
        double Max = .5;
        double Min = -0.5;
        for (int i = 0; i < 10000; i++) {
            double value = Min + ((Math.random()) * (Max - Min));
            System.out.println(value);
        }
    }
4

3 回答 3

9

Well返回andMath.random()之间的随机双精度数,因此要将范围更改为to ,我们可以减去(因为and ):01-1/21/21/20 - 1/2 = -1/21 - 1/2 = 1/2

Math.random() - 0.5

你现在所做的更一般,即如果你想要一个 double betweenmin并且max适当的表达式是

min + Math.random() * (max - min)

在这种情况下,插入,min = -0.5我们max = 0.5

-0.5 + Math.random() * (0.5 - -0.5)

这简化为

Math.random() - 0.5

我还应该提到,如果您阅读该random()方法的文档,您会发现它返回一个大于或等于0.0 且小于1.0 的 double。这意味着上面的表达式应该产生一个范围内的数字[-0.5, 0.5),这意味着-0.5可能会返回但0.5不能。

于 2013-04-15T23:13:16.397 回答
5

你可以这样做:

Math.random() - 0.5

这是因为 的最小值Math.random()为 0,最大值为 1。如果减去一半,则最小值为0 - 0.5 == -0.5,最大值为1 - 0.5 == 0.5

因此,您的原始代码可以缩短为:

public static void main(String args[]) {
    for (int i = 0; i < 10000; i++) {
        double value = Math.random() - 0.5; // no need for a "double" cast,
                                            // Math.random() returns a double
        System.out.println(value);
    }
}
于 2013-04-15T23:12:47.393 回答
1

请记住,Math.Random() 类将返回一个介于 0 和 1 之间的值,不包括 1。

在这种情况下,Math.Random()-0.5会很好地工作

于 2013-04-15T23:17:27.060 回答