我试图找出一种方法来生成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);
}
}
Run Code Online (Sandbox Code Playgroud)
那么Math.random()在0和之间返回一个随机的双1,所以要将范围更改-1/2为1/2,我们可以减去1/2(自0 - 1/2 = -1/2和1 - 1/2 = 1/2):
Math.random() - 0.5
Run Code Online (Sandbox Code Playgroud)
你现在正在做的是更一般的,即如果你想要一个双倍之间min和max适当的表达式
min + Math.random() * (max - min)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,插入min = -0.5和max = 0.5我们有
-0.5 + Math.random() * (0.5 - -0.5)
Run Code Online (Sandbox Code Playgroud)
这简化为
Math.random() - 0.5
Run Code Online (Sandbox Code Playgroud)
我还要提一下,如果你阅读random()方法的文档,你会发现它返回一个大于或等于 0.0且小于 1.0 的double .这意味着上面的表达式应该在该范围内产生一个数字[-0.5, 0.5),这意味着-0.5可能会返回但0.5不能返回.
你可以这样做:
Math.random() - 0.5
Run Code Online (Sandbox Code Playgroud)
这是因为min Math.random()为0,最大值为1.如果减去一半,则min将为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);
}
}
Run Code Online (Sandbox Code Playgroud)