我试图找出一种在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);
}
}
答案 0 :(得分:9)
好Math.random()
会在0
和1
之间返回一个随机双倍,所以要将范围更改为-1/2
到1/2
,我们可以减去{{ 1}}(自1/2
和0 - 1/2 = -1/2
):
1 - 1/2 = 1/2
您现在正在做的更为一般,即如果您想在Math.random() - 0.5
和min
之间加倍,则适当的表达式将是
max
在这种情况下,请插入min + Math.random() * (max - min)
和min = -0.5
max = 0.5
简化为
-0.5 + Math.random() * (0.5 - -0.5)
我还应该提一下,如果你阅读Math.random() - 0.5
方法的文档,你会发现它返回一个大于或等于的双到0.0和小于 1.0。这意味着上面的表达式应该生成random()
范围内的数字,这意味着可能会返回[-0.5, 0.5)
,但-0.5
不能返回。{/ p>
答案 1 :(得分:5)
你可以这样做:
Math.random() - 0.5
这是因为Math.random()
的最小值为0,最大值为1.如果减去一半,则最小值为0 - 0.5 == -0.5
,最大值为1 - 0.5 == 0.5
。< / p>
因此,您的原始代码可以缩短为:
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);
}
}
答案 2 :(得分:1)
请记住,Math.Random()类将返回0到1之间的值,不包括1.
在这种情况下,Math.Random()-0.5
会甜蜜地工作