zoukankan      html  css  js  c++  java
  • 【JAVA】产生随机数:rand.nextInt(int n )

    参考链接:

    1. 代码示例

      - `Random rand = new Random();`
      - `p += rand.nextInt(2); //取0-2(左闭右开不包括2)的整数`
    

    2. rand.nextInt()的用法

    • 背景:

      • 自从JDK最初版本发布起,我们就可以使用java.util.Random类产生随机数了。
      • 在JDK1.2中,Random类有了一个名为nextInt()的方法:public int nextInt(int n)
    • 给定一个参数n,nextInt(n)将返回一个大于等于0小于n的随机数,即:0 <= nextInt(n) < n。

    • 源码:

      /**
       * Returns a pseudo-random uniformly distributed {@code int}
       * in the half-open range [0, n).
       */
      public int nextInt(int n) {
          if (n <= 0) {
              throw new IllegalArgumentException("n <= 0: " + n);
          }
          if ((n & -n) == n) {
              return (int) ((n * (long) next(31)) >> 31);
          }
          int bits, val;
          do {
              bits = next(31);
              val = bits % n;
          } while (bits - val + (n - 1) < 0);
          return val;
      }
      

    3. rand.nextInt随机数取值范围

    • 左闭右闭 [a,b]:rand.nextInt(b-a+1)+a

    • 左闭右开 [a,b):rand.nextInt(b-a)+a

    • 示例:

      • 要求在10到300中产生随机数[10,300]包含10和300: int randNum = rand.nextInt(300-10+1) + 10;
      • rand.nextInt(300-10+1)=rand.nextInt(291)意思是产生[0,291)不包括291再加10就是[10,301)不包括301,如果要包括300所以要 rand.nextInt(300-10+1)里面要加1.
      • 如果是[10,300)不包括300就是 rand.nextInt(300-10)+10,不要加1.

    4. random.nextInt()与Math.random()基础用法

    • 1、来源

      • random.nextInt() 为 java.util.Random类中的方法;
      • Math.random() 为 java.lang.Math 类中的静态方法。
    • 2、用法

      • 产生0-n的伪随机数(伪随机数参看最后注解):
      • // 两种生成对象方式:带种子和不带种子(两种方式的区别见注解)
        • Random random = new Random();

        • Integer res = random.nextInt(n);

        • Integer res = (int)(Math.random() * n);

    • 3、总结

      • Math.random() 方法生成[0, 1)范围内的double类型随机数;Random类中的nextXxxx系列方法生成0-n的随机数;
      • Math.random() 线程安全,多线程环境能被调用;
      • 如无特殊需求,则使用(int)(Math.random()*n)的方式生成随机数即可。
    • 4、注:何谓伪随机数

      • 伪随机既有规则的随机,Random类中的随机算法就是伪随机。
      • 具体表现为:相同种子数的Random对象生成的随机数序列相同:

    END

  • 相关阅读:
    Cisco ASR1002-X告警处理
    WLC5520无法通过无线客户端进行网管故障解决
    一键分享mob,方法二
    Java中堆内存和栈内存详解
    linux.linuxidc.com
    android中shape的使用(android:angle小解)
    Activity的Launch mode详解 :standard(默认), singleTop, singleTask和 singleInstance
    Android studio个人常用快捷键
    Android 公告新闻消息资讯之垂直滚动效果
    数据库设计相关
  • 原文地址:https://www.cnblogs.com/anliux/p/12327584.html
Copyright © 2011-2022 走看看