【问题标题】:How to get a random between 1 - 100 from randDouble in Java?如何从 Java 中的 randDouble 获得 1 - 100 之间的随机数?
【发布时间】:2011-10-04 02:17:23
【问题描述】:

好的,我对 Java 还是很陌生。我们得到了一项任务来创建一个游戏,您必须在其中猜测计算机生成的随机整数。问题是我们的讲师坚持我们使用:

double randNumber = Math.random();

然后将其转换为接受 1 - 100 的随机整数。我有点不知所措。我到目前为止是这样的:

//Create random number 0 - 99
double randNumber = Math.random();
d = randNumber * 100;

//Type cast double to int
int randomInt = (int)d;

但是,随机双精度的随机问题是,0 是可能的,而 100 则不是。我想改变它,使 0 不是可能的答案,而 100 是。帮助?

【问题讨论】:

    标签: java random


    【解决方案1】:

    Random r = new Random();
    int randomInt = r.nextInt(100) + 1;
    

    【讨论】:

      【解决方案2】:

      ThreadLocalRandom 类提供了int nextInt(int origin, int bound) 方法来获取范围内的随机整数:

      // Returns a random int between 1 (inclusive) & 101 (exclusive)
      int randomInt = ThreadLocalRandom.current().nextInt(1, 101)
      

      ThreadLocalRandom 是在 Java 中生成随机数的几种方法之一,包括较旧的 Math.random() 方法和 java.util.Random 类。 ThreadLocalRandom 的优点是它专门设计用于在单个线程中使用,避免了其他实现带来的额外线程同步成本。因此,它通常是在安全敏感上下文之外使用的最佳内置随机实现。

      如果适用,在并发程序中使用 ThreadLocalRandom 而不是共享 Random 对象通常会遇到更少的开销和争用。

      【讨论】:

        【解决方案3】:

        你快到了。只需将结果加 1:

        int randomInt = (int)d + 1;
        

        这会将您的范围“转移”到1 - 100 而不是0 - 99

        【讨论】:

          【解决方案4】:

          我会写 int number = 1 + (int) (Math.random() * 100);

          【讨论】:

            【解决方案5】:
                double random = Math.random();
            
                double x = random*100;
            
                int y = (int)x + 1; //Add 1 to change the range to 1 - 100 instead of 0 - 99
            
                System.out.println("Random Number :");
            
                System.out.println(y);
            

            【讨论】:

              【解决方案6】:

              这是一种干净且有效的方法,带有范围检查!享受吧。

              public double randDouble(double bound1, double bound2) {
                      //make sure bound2> bound1
                      double min = Math.min(bound1, bound2);
                      double max = Math.max(bound1, bound2);
                      //math.random gives random number from 0 to 1
                      return min + (Math.random() * (max - min));
                  }
              

              //稍后只需调用:

              randDouble(1,100)
              //example result:
              //56.736451234
              

              【讨论】:

                猜你喜欢
                • 2020-11-02
                • 2018-09-14
                • 2016-09-25
                • 1970-01-01
                • 2011-01-23
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多