如何获得范围内为负数的随机数? [复制]

Posted

技术标签:

【中文标题】如何获得范围内为负数的随机数? [复制]【英文标题】:How do I get a random number with a negative number in range? [duplicate] 【发布时间】:2015-03-14 15:19:39 【问题描述】:

考虑以下代码:

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

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

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


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

【问题讨论】:

“它将返回一个介于 30 和 20 之间的随机数” - 不... @alfasin 我也想说同样的话。另外,OP 你想要的数字范围是多少? 让我向你保证,(30 - 20) + 1 只是 11 @PM77-1 除了在这种情况下,当它是11(不包括)或10(包括)。 How to generate random integers within a specific range in Java?的可能重复 【参考方案1】:

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

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

范围是 -15 到 15。

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

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

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

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

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

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

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

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

【讨论】:

【参考方案2】:
int randomNumber=(random.nextInt(DOUBLE_MAX)-MAX);

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

它也适用于负数。

所以:

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

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

它也适用于双打。

【讨论】:

max-min 大于 Integer.MAX_VALUE 时不起作用 @awwsmm 你可以把它转换成很长的东西 负数时返回超出范围的数字。

以上是关于如何获得范围内为负数的随机数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#如何生成一个范围内的随机数,偏向范围的低端? [复制]

Java如何生成一定范围内的随机数? [复制]

js中获得指定范围的n个不重复的随机数

C:如何创建一定范围内的随机数? [复制]

如何获得mysql随机整数范围?

使用 C#,如何将变量设置为范围内的随机数? [复制]