【问题标题】:How to generate random positive and negative numbers in Java [duplicate]如何在Java中生成随机正数和负数[重复]
【发布时间】:2011-04-25 17:41:07
【问题描述】:

我正在尝试在原始数据类型 short 的范围(-32768、32767)上生成随机整数。 java Random 对象只生成正数。我将如何在该间隔上随机创建数字?谢谢。

【问题讨论】:

标签: java random numbers


【解决方案1】:

你随机选择(0, 32767+32768) 然后减去32768

【讨论】:

    【解决方案2】:

    生成 0 到 65535 之间的数字,然后减去 32768

    【讨论】:

      【解决方案3】:
      public static int generatRandomPositiveNegitiveValue(int max , int min) {
          //Random rand = new Random();
          int ii = -min + (int) (Math.random() * ((max - (-min)) + 1));
          return ii;
      }
      

      【讨论】:

      • 你在哪里使用 rand?
      • 我们以 min = 2 和 max = 4 为例。所以在最低随机数的情况下,假设为 0.001,* ((4 - (- 2)) + 1) = 7 * 0.001 = (int) 0.007 = 0 然后 -2 + 0 = -2。因此,实际上最小值为 2 时,我们得到了 -2。这个公式中出现了问题。
      【解决方案4】:
      Random random=new Random();
      int randomNumber=(random.nextInt(65536)-32768);
      

      【讨论】:

      • scala> def myNextPositiveNumber :Int = { r.nextInt(65536)-32768} myNextPositiveNumber: Int scala> println(myNextPositiveNumber) -17761 scala> println(myNextPositiveNumber) -26558 scala> scala> println( myNextPositiveNumber) -17758 scala> println(myNextPositiveNumber) -823 scala> println(myNextPositiveNumber) 17370
      【解决方案5】:

      这是一个我知道的老问题,但是嗯....

      n=n-(n*2)
      

      【讨论】:

      • 这行不通。 3 = 3 - (3*2), 3 = -6。
      • 错了。操作顺序。
      • 不,它仍然无法正常工作。你是如何进行操作的?
      • 3-(3*2) = 3-(6) = -3
      • 这有什么意义?这只是写n = -n 的慢速方法,但n*2 可能会溢出。溢出有什么用吗?使用n=-32768,我们会得到n = +32768,它在2 的补码-32768 .. +32767 范围之外。
      【解决方案6】:

      (Math.floor((Math.random() * 2)) > 0 ? 1 : -1) * Math.floor((Math.random() * 32767))

      【讨论】:

        【解决方案7】:

        如果人们对双重版本感兴趣(请注意,如果通过了 MAX_VALUE 或 MIN_VALUE,则会出现故障):

        private static final Random generator = new Random();
        public static double random(double min, double max) {
            return min + (generator.nextDouble() * (max - min));
         }
        

        【讨论】:

          【解决方案8】:

          ([我的双重兼容的原始类型])(Math.random() * [我的最大值] * (Math.random() > 0.5 ? 1 : -1))

          示例:

          // need a random number between -500 and +500
          long myRandomLong = (long)(Math.random() * 500 * (Math.random() > 0.5 ? 1 : -1));
          

          【讨论】:

            猜你喜欢
            • 2012-10-10
            • 2012-11-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-19
            • 2013-04-06
            相关资源
            最近更新 更多