最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實例講解Java中random.nextInt()與Math.random()的基礎用法

 更新時間:2019年02月12日 16:35:44   作者:wlmmmm  
今天小編就為大家分享一篇關(guān)于實例講解Java中random.nextInt()與Math.random()的基礎用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

1、來源

random.nextInt() 為 java.util.Random類中的方法;

Math.random() 為 java.lang.Math 類中的靜態(tài)方法。

2、用法

產(chǎn)生0-n的偽隨機數(shù)(偽隨機數(shù)參看最后注解):

// 兩種生成對象方式:帶種子和不帶種子(兩種方式的區(qū)別見注解)
Random random = new Random();
Integer res = random.nextInt(n);
Integer res = (int)(Math.random() * n);

3、jdk源碼

// random.nextInt(n)
public int nextInt(int n) {
  if (n <= 0)
    throw new IllegalArgumentException("n must be positive");
  if ((n & -n) == n) // i.e., n is a power of 2
    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;
}
// Math.random()
public static double random() {
  Random rnd = randomNumberGenerator;
  // 第一次調(diào)用,生成一個隨機數(shù)生成器
  if (rnd == null) rnd = initRNG();
  return rnd.nextDouble();
}
// 生成的方法為同步的,線程安全
private static synchronized Random initRNG() {
 Random rnd = randomNumberGenerator;
   return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd;
 }
// 該方法為 Random 類中的方法
public double nextDouble() {
  return (((long)(next(26)) << 27) + next(27))
    / (double)(1L << 53);
}

4、小結(jié)

  • Math.random() 方法生成[0, 1)范圍內(nèi)的double類型隨機數(shù);Random類中的nextXxxx系列方法生成0-n的隨機數(shù);
  • Math.random() 線程安全,多線程環(huán)境能被調(diào)用;
  • 如無特殊需求,則使用(int)(Math.random()*n)的方式生成隨機數(shù)即可。

5、注:何謂偽隨機數(shù)

偽隨機既有規(guī)則的隨機,Random類中的隨機算法就是偽隨機。

具體表現(xiàn)為:相同種子數(shù)的Random對象生成的隨機數(shù)序列相同:

@Test
public void createProjectNo() {
   Random r1 = new Random(100);
   Random r2 = new Random(100);
   for (int i = 0; i < 100; i ++) {
     System.out.println(r1.nextInt(10)+", "+r2.nextInt(10));
   }
 }

結(jié)果為:

如不想生成相同的隨機數(shù)序列,則應只使用一個Random類。而Math類中的隨機數(shù)生成器 randomNumberGenerator 對象為靜態(tài)的,可考慮使用。

6、注:Random類的兩種構(gòu)造方法區(qū)別

1、源碼

public Random() {
 this(seedUniquifier() ^ System.nanoTime());
}
public Random(long seed) {
  if (getClass() == Random.class)
    this.seed = new AtomicLong(initialScramble(seed));
  else {
    // subclass might have overriden setSeed
    this.seed = new AtomicLong();
    setSeed(seed);
  }
}

2、區(qū)別

從源碼中可以看到,未定義種子的構(gòu)造方法里,使用當前系統(tǒng)時間相關(guān)的一個數(shù)字作為種子數(shù),該種子數(shù)只作為隨機算法的起源數(shù)字,與生成的隨機數(shù)區(qū)間無關(guān)系。

這篇文章是我對Java中隨機數(shù)的一些簡單的理解,如有不對的地方或者其他的見解歡迎指導。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 實現(xiàn)分庫分表功能

    Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 實現(xiàn)分庫分表功能

    這篇文章主要介紹了Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 實現(xiàn)分庫分表功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java多線程Thread類的使用詳解

    Java多線程Thread類的使用詳解

    這篇文章主要介紹了Java多線程Thread類的使用及注意事項,在java標準庫中提供了一個Thread類來表示/操作線程,Thread類也可以視為是java標準庫提供的API
    2022-12-12
  • Java中為什么不同的返回類型不算方法重載

    Java中為什么不同的返回類型不算方法重載

    這篇文章主要介紹了Java中為什么不同的返回類型不算方法重載,方法重載是指在同一個類中,定義了多個同名方法,但每個方法的參數(shù)類型或者是參數(shù)個數(shù)不同就是方法重載,下文詳細介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Spring Boot與Redisson實時排行榜功能

    Spring Boot與Redisson實時排行榜功能

    排行榜功能是常見且重要的需求之一,本文主要介紹了Spring Boot與Redisson實時排行榜功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • JAVA中 終止線程的方法介紹

    JAVA中 終止線程的方法介紹

    JAVA中 終止線程的方法介紹,需要的朋友可以參考一下
    2013-03-03
  • 詳解Java如何在Array和List之間進行轉(zhuǎn)換

    詳解Java如何在Array和List之間進行轉(zhuǎn)換

    這篇文章主要為大家介紹了詳解Java如何在Array和List之間進行轉(zhuǎn)換的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化

    Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化

    Java7對NIO進行了大的改進,新增了許多功能,接下來通過本文給大家介紹Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化 ,需要的朋友可以參考下
    2019-05-05
  • SonarQube安裝、配置與使用教程圖解

    SonarQube安裝、配置與使用教程圖解

    這篇文章主要介紹了SonarQube安裝、配置與使用教程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 簡單了解java volatile關(guān)鍵字實現(xiàn)的原理

    簡單了解java volatile關(guān)鍵字實現(xiàn)的原理

    這篇文章主要介紹了簡單了解volatile關(guān)鍵字實現(xiàn)的原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Java大數(shù)運算BigInteger與進制轉(zhuǎn)換詳解

    Java大數(shù)運算BigInteger與進制轉(zhuǎn)換詳解

    這篇文章主要介紹了Java大數(shù)運算BigInteger與進制轉(zhuǎn)換詳解,Java 提供了 BigInteger(大整數(shù))類和 BigDecimal(大浮點數(shù))類用于大數(shù)運算,這兩個類都繼承自 Number 類(抽象類),由于 BigInteger 在大數(shù)運算中更常見,需要的朋友可以參考下
    2023-09-09

最新評論

鹤峰县| 河南省| 台山市| 呼伦贝尔市| 买车| 阿拉善右旗| 泽普县| 荔波县| 荔波县| 都昌县| 都昌县| 五莲县| 镇原县| 海原县| 正镶白旗| 桐乡市| 广元市| 富蕴县| 神农架林区| 承德市| 常熟市| 多伦县| 文水县| 横山县| 青海省| 资中县| 武平县| 道真| 固原市| 绥江县| 张家界市| 林州市| 天祝| 宁乡县| 长治市| 松江区| 锡林浩特市| 重庆市| 滕州市| 蓬莱市| 合山市|