Java Math.random()从-N到N的范围内生成随机数

3
我需要随机选择一个数字(这是在Java中使用Math.random()实现的),该数字应在-N和N之间。具体来说,在当前情况下,我需要在-1和1之间选择一个随机数。我找到的所有结果都只介绍了如何在一些正数之间找到随机数。
目前,我正在使用以下语句,但它只涵盖了我需要的一半内容。
double i = Math.random();

1
有点恶心,但只是为了好玩:double i = Math.random() * (Math.random() > 5 ? -1 : 1);。(虽然这比典型解决方案提供了2倍的数字量) - Ryan Amos
5个回答

3

生成一个在-n到n之间的随机数:

/**
 * @return a random number, r, in the range -n <= r < n
 */
public static double getRandom(double n) {
   return Math.random()*n*2 - n;
}

1
挑刺一下,但实际上范围是-n <= r < n - Joachim Isaksson
真的,但相等的概率大约是40亿分之一。 - Thorn

1

生成在范围(min,max)内均匀分布的随机数的一般公式为:

min + rand.nextDouble() * (max - min)

在您的情况下,max == -min == N。只需插入值并简化即可:
2 * N * rand.nextDouble() - N

1

只需使用:

2 * Math.random() - 1

0

试试这个:

double n = 1.0;
double range = 2 * n;
double value = range * Math.random() - n;

您可以修改n的值来改变生成的最大/最小值,例如如果您需要在范围[-10, 10)内生成随机数,则将n = 10.0;


限制实际上是最大数字的两倍。也许将其命名为“范围”更合适? - Ryan Amos

0

使用随机函数

(0, 32767+32768) then subtract by 32768

或者生成介于0和65535之间的数字,然后减去32768


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接