【问题标题】: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(包括)。

标签: java random


【解决方案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 你可以把它转换成很长的东西
        • 负数时返回超出范围的数字。
        猜你喜欢
        • 2012-10-10
        • 2021-07-24
        • 1970-01-01
        • 2010-11-02
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多