如何获得范围内为负数的随机数? [复制]
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。我正在尝试制作一个生存模拟器。那将是我的体温。
好的。让我们将该范围写为-10
到30
。 nextInt(n)
将返回一个介于 0
和 n
之间的值,因此如果您想要小于 0 的范围,您必须从结果中减去 10
并将 10
添加到 n
。那是
Random random = new Random();
int rand = random.nextInt(41) - 10;
现在让我们看看如何确定这些数字。请记住,nextInt()
将在0
和n
(不包括)之间返回,我们希望-10
到30
(包括);所以41
是n
,我们减去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】:要在min
和max
的设置范围内获取随机数:
int number = random.nextInt(max - min) + min;
它也适用于负数。
所以:
random.nextInt(30 + 10) - 10;
// max = 30; min = -10;
将产生一个介于 -10 和 30(不包括)之间的随机整数。
它也适用于双打。
【讨论】:
max-min
大于 Integer.MAX_VALUE
时不起作用
@awwsmm 你可以把它转换成很长的东西
负数时返回超出范围的数字。以上是关于如何获得范围内为负数的随机数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章