欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法

 更新時(shí)間:2022年07月19日 09:41:05   作者:cyan20115  
在Java中生成隨機(jī)數(shù)的場景有很多,下面這篇文章主要給大家介紹了關(guān)于Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在本文中,我們將向您展示三種生成范圍內(nèi)隨機(jī)整數(shù)的方法。

  • java.util.Random.nextInt
  • 數(shù)學(xué)隨機(jī)
  • java.util.Random.ints(Java 8)

1. java.util.Random

此Random().nextInt(int bound)生成一個(gè)從0(含)到bound( Random().nextInt(int bound)的隨機(jī)整數(shù)。

1.1代碼段。 對于getRandomNumberInRange(5, 10) ,這將生成一個(gè)介于5(含)和10(含)之間的隨機(jī)整數(shù)。

private static int getRandomNumberInRange(int min, int max) {
        if (min >= max) {
            throw new IllegalArgumentException("max must be greater than min");
        }
 
        Random r = new Random();
        return r.nextInt((max - min) + 1) + min;
    }

1.2什么是(max – min)+ 1)+ min?

上面的公式將在min(含)和max(含)之間生成一個(gè)隨機(jī)整數(shù)。

//Random().nextInt(int bound) = Random integer from 0 (inclusive) to bound (exclusive)
    
    //1. nextInt(range) = nextInt(max - min)
    new Random().nextInt(5);  // [0...4] [min = 0, max = 4]
    new Random().nextInt(6);  // [0...5]
    new Random().nextInt(7);  // [0...6]
    new Random().nextInt(8);  // [0...7]
    new Random().nextInt(9);  // [0...8]
    new Random().nextInt(10); // [0...9]            
    new Random().nextInt(11); // [0...10]
    
    //2. To include the last value (max value) = (range + 1)
    new Random().nextInt(5 + 1)  // [0...5] [min = 0, max = 5]
    new Random().nextInt(6 + 1)  // [0...6]
    new Random().nextInt(7 + 1)  // [0...7]
    new Random().nextInt(8 + 1)  // [0...8]
    new Random().nextInt(9 + 1)  // [0...9]
    new Random().nextInt(10 + 1) // [0...10]            
    new Random().nextInt(11 + 1) // [0...11]
    
    //3. To define a start value (min value) in a range,
    //   For example, the range should start from 10 = (range + 1) + min
    new Random().nextInt(5 + 1)  + 10 // [0...5]  + 10 = [10...15]
    new Random().nextInt(6 + 1)  + 10 // [0...6]  + 10 = [10...16]
    new Random().nextInt(7 + 1)  + 10 // [0...7]  + 10 = [10...17]
    new Random().nextInt(8 + 1)  + 10 // [0...8]  + 10 = [10...18]
    new Random().nextInt(9 + 1)  + 10 // [0...9]  + 10 = [10...19]
    new Random().nextInt(10 + 1) + 10 // [0...10] + 10 = [10...20]
    new Random().nextInt(11 + 1) + 10 // [0...11] + 10 = [10...21]
    
    // Range = (max - min)
    // So, the final formula is ((max - min) + 1) + min
    
    //4. Test [10...30]
    // min = 10 , max = 30, range = (max - min)
    new Random().nextInt((max - min) + 1) + min
    new Random().nextInt((30 - 10) + 1) + 10
    new Random().nextInt((20) + 1) + 10
    new Random().nextInt(21) + 10    //[0...20] + 10 = [10...30]
    
    //5. Test [15...99]
    // min = 15 , max = 99, range = (max - min)
    new Random().nextInt((max - min) + 1) + min
    new Random().nextInt((99 - 15) + 1) + 15
    new Random().nextInt((84) + 1) + 15
    new Random().nextInt(85) + 15    //[0...84] + 15 = [15...99]
    
    //Done, understand?

1.3完整示例生成10個(gè)隨機(jī)整數(shù),范圍在5(含)和10(含)之間。

TestRandom.java

package com.mkyong.example.test;
import java.util.Random;
public class TestRandom {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(getRandomNumberInRange(5, 10));
        }
 
    }
 
    private static int getRandomNumberInRange(int min, int max) {
        if (min >= max) {
            throw new IllegalArgumentException("max must be greater than min");
        }
 
        Random r = new Random();
        return r.nextInt((max - min) + 1) + min;
    }
}

輸出。

7
6
10
8
9
5
7
10
8
5

2.數(shù)學(xué)隨機(jī)

此Math.random()給出從0.0(含)到1.0( Math.random()的隨機(jī)雙Math.random() 。

2.1代碼段。 參考1.2,或多或少是相同的公式。

(int)(Math.random() * ((max - min) + 1)) + min

2.2完整示例生成10個(gè)隨機(jī)整數(shù),范圍在16(含)和20(含)之間。

TestRandom.java
package com.mkyong.example.test;
public class TestRandom {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(getRandomNumberInRange(16, 20));
        }
    }
 
    private static int getRandomNumberInRange(int min, int max) {
        if (min >= max) {
            throw new IllegalArgumentException("max must be greater than min");
        }
        return (int)(Math.random() * ((max - min) + 1)) + min;
    }
}

輸出。

17
16
20
19
20
20
20
17
20
16

注意

請閱讀Oracle論壇帖子 , Random.nextInt(n)比Math.random() * n更有效。

3. Java 8 Random.ints

在Java 8中,在java.util.Random中添加了新方法

public IntStream ints(int randomNumberOrigin, int randomNumberBound)
    public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)

此Random.ints(int origin, int bound)或Random.ints(int min, int max)生成一個(gè)從原點(diǎn)(包含)到bound(不包含)的隨機(jī)整數(shù)。

3.1代碼段。

private static int getRandomNumberInRange(int min, int max) {
        Random r = new Random();
        return r.ints(min, (max + 1)).findFirst().getAsInt();
    }

3.2完整示例生成10個(gè)隨機(jī)整數(shù),范圍在33(含)和38(含)之間。

TestRandom.java
package com.mkyong.form.test;
import java.util.Random;
public class TestRandom {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(getRandomNumberInRange(33, 38));
        }
    }
 
    private static int getRandomNumberInRange(int min, int max) {
        Random r = new Random();
        return r.ints(min, (max + 1)).limit(1).findFirst().getAsInt();
    }
}

輸出。

34
35
37
33
38
37
34
35
36
37

3.3額外內(nèi)容,僅供參考。

生成介于33(含)和38(不含)之間的隨機(jī)整數(shù),流大小為10。并使用forEach打印出項(xiàng)目。

//Java 8 only
    new Random().ints(10, 33, 38).forEach(System.out::println);

輸出。

34
37
37
34
34
35
36
33
37
34

參考文獻(xiàn)

  1. java.util.Random JavaDoc
  2. java.lang.Math JavaDoc
  3. Oracle論壇:隨機(jī)數(shù)生成
  4. 在JavaScript中生成加權(quán)隨機(jī)數(shù)

翻譯自: https://mkyong.com/java/java-generate-random-integers-in-a-range/

總結(jié)

到此這篇關(guān)于Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法的文章就介紹到這了,更多相關(guān)Java生成隨機(jī)整數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中間的接口用法詳解

    Java中間的接口用法詳解

    Java 程序員都知道要面向接口編程,那 Java? 中的接口除了定義接口方法之外還能怎么用你知道嗎,今天小編就來帶大家看一下 Java 中間的接口還可以有哪些用法,需要的朋友可以參考下
    2023-07-07
  • java短路邏輯運(yùn)算符實(shí)例用法詳解

    java短路邏輯運(yùn)算符實(shí)例用法詳解

    在本篇文章里小編給大家分享的是一篇關(guān)于java短路邏輯運(yùn)算符實(shí)例用法內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-04-04
  • maven倉庫訪問順序小結(jié)

    maven倉庫訪問順序小結(jié)

    在日常操作中,相信很多人在maven倉庫的優(yōu)先級順序是什么問題上存在疑惑,本文就來介紹一下maven倉庫訪問順序,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的圖文教程

    IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的圖文教程

    這篇文章主要介紹了IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解

    Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解

    這篇文章主要介紹了Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解

    Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解

    這篇文章主要介紹了Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 以實(shí)例講解Objective-C中的KVO與KVC機(jī)制

    以實(shí)例講解Objective-C中的KVO與KVC機(jī)制

    這篇文章主要介紹了以實(shí)例講解Objective-C中的KVO與KVC機(jī)制,即Key-Value-Observing與Key-Value-Coding,需要的朋友可以參考下
    2015-09-09
  • Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系

    Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系

    這篇文章主要為大家詳細(xì)介紹了Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • java中Websocket的使用方法例子

    java中Websocket的使用方法例子

    這篇文章主要給大家介紹了關(guān)于java中Websocket的使用方法,WebSocket是HTML5開始提供的一種在瀏覽器和服務(wù)器間進(jìn)行全雙工通信的協(xié)議,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java Scala實(shí)現(xiàn)數(shù)據(jù)庫增刪查改操作詳解

    Java Scala實(shí)現(xiàn)數(shù)據(jù)庫增刪查改操作詳解

    這篇文章主要介紹了Java Scala實(shí)現(xiàn)數(shù)據(jù)庫增刪查改操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04

最新評論