如何在一个负数范围内获取随机数?

15

考虑以下代码:

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

它将返回一个介于30到20之间的随机数。然而,我需要它的范围包括负数。如何在生成中包含负数?

我尝试使用可能为负数的数学方法,但结果出现错误。简单地加减负数也不能得到所需的值。


抱歉,我还没完全清醒。正确的代码是 int rand = new Random().nextInt((30 - (-20)) + 1) + (-20);


5
它会返回一个介于20和30之间的随机数。- 不是... - Nir Alfasi
1
让我向您保证,(30-20)+1 就是 11 - PM 77-1
除非在这种情况下,即为 11(排除)或 10(包含)。 - Elliott Frisch
仅仅减去或加上负数并不能得到所需的值。从技术上讲,它会产生一个期望的范围。那么所需的范围是什么? - Elliott Frisch
显示剩余2条评论
4个回答

32

要在一定范围内取得一个随机数,该范围由 minmax 决定:

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

它也可以处理负数。

所以:

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

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

它也适用于双精度浮点数。


1
当范围max-min大于Integer.MAX_VALUE时,无法正常工作。 - awwsmm
@awwsmm 你可以将它转换为长整型或其他类型。 - EDToaster
当输入为负数时,返回超出范围的数字。 - Epic Speedy

16
您可以使用 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);

1
好的。首先,尝试仅创建一次Random实例,但为了举例说明,
int rand = -15 + new Random().nextInt(31);

范围是-15到15。

Random.nextInt(int)的JavaDoc(部分内容)如下:返回0(包括)和指定值(不包括)之间的伪随机均匀分布的int值。请注意,您提供的示例(30-20)+1的范围为0到10(包括边界)。

进一步举例,要获取范围在20到30之间的值,您需要使用:

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

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

30 - -10。我正在尝试制作一个生存模拟器。这将是我的温度。

好的。让我们将该范围写成-1030nextInt(n)将返回介于0n之间的值,因此如果您想要小于0的范围,必须从结果中减去10并将其添加到n中的10。那就是

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

现在让我们看看如何确定这些数字。记住,nextInt()会返回0n(不包括n),而我们想要的是-1030(包括两端); 因此41n,我们要减去10。如果结果是0(最小值),我们得到-10,如果结果是40(最大值),我们得到30

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

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


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