如何获得范围内为负数的随机数?

How do I get a random number with a negative number in range?

考虑以下代码:

int rand = new Random().nextInt((30 - 20) + 1) + 20

它将 return 一个介于 30 和 20 之间的随机数。但是,我需要它的范围包括负数。我如何在生成中包含负数?

我曾尝试使用可能为负的数学运算,但这导致了错误。简单地减去或添加负数不会产生所需的值。


对不起,我才半醒。正确的代码是 int rand = new Random().nextInt((30 - 20) + 1) + 20;.

好的。首先,尝试只创建一次 Random 实例,但举个例子,

int rand = -15 + new Random().nextInt(31);

是-15到15的范围。

Random.nextInt(int) JavaDoc 说(部分)Returns 伪随机,均匀分布在 0(含)和指定值(不含)之间的 int 值.请注意,您提供的 (30 - 20) + 1 示例是 0 到 10(含)范围。

再举一个例子,要获得 20 到 30 的范围,您可以使用:

int rand = 20 + new Random().nextInt(11);

记住,结果的范围是 0 到 n

30 - -10. I'm trying to make a survival simulator. That will be my temperature.

好的。我们将该范围写为 -1030nextInt(n) 将 return 介于 0n 之间的值,因此如果您希望范围小于 0,则必须从结果中减去 10 并添加 10n。那是

Random random = new Random();
int rand = random.nextInt(41) - 10;

现在让我们来看看如何确定这些数字。请记住,nextInt() 将 return 在 0n(不含)之间,我们希望 -1030(含);所以 41n 我们减去 10。如果结果是 0(最小值),我们得到 -10,如果结果是 40(最大值),我们得到 30.

int randomNumber=(random.nextInt(DOUBLE_MAX)-MAX);

或者,创建一个随机的正数或负数 1 并将其相乘。

您可以使用 Random.nextBoolean() 来确定它是随机正整数还是负整数。

int MAX = 30;
Random random = new Random(); // Optionally, you can specify a seed, e.g. timestamp.
int rand = random.nextInt(MAX) * (random .nextBoolean() ? -1 : 1);

要在 minmax 的设定范围内获取随机数:

int number = random.nextInt(max - min) + min;

它也适用于负数。

所以:

random.nextInt(30 + 10) - 10;
// max = 30; min = -10;

将产生一个介于 -10 和 30(不含)之间的随机整数。

它也适用于双打。