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

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實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn)

    Java實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn)

    這篇文章主要介紹了Java實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 淺談JVM之類的加載鏈接和初始化

    淺談JVM之類的加載鏈接和初始化

    有了java class文件之后,為了讓class文件轉(zhuǎn)換成為JVM可以真正運(yùn)行的結(jié)構(gòu),需要經(jīng)歷加載,鏈接和初始化的過程。這三個(gè)過程是怎么工作的呢?在本文中你將會(huì)找到答案。
    2021-06-06
  • Java實(shí)現(xiàn)替換PDF中的字體功能

    Java實(shí)現(xiàn)替換PDF中的字體功能

    文檔中可通過應(yīng)用不同的字體來呈現(xiàn)不一樣的視覺效果,通過字體來實(shí)現(xiàn)文檔布局、排版等設(shè)計(jì)需要。本文將詳細(xì)為大家介紹如何利用Java實(shí)現(xiàn)替換PDF文中的字體,需要的可以參考一下
    2022-03-03
  • 使用jvisualvm配合Visual GC插件監(jiān)控Java程序詳細(xì)總結(jié)

    使用jvisualvm配合Visual GC插件監(jiān)控Java程序詳細(xì)總結(jié)

    本節(jié)將會(huì)介紹一下jvisualvm的特性及作用、各個(gè)功能是如何使用的、最后會(huì)介紹jvisualvm的插件Visual GC的安裝及使用
    2021-09-09
  • Java中 ? extends T 和 ? super T的理解

    Java中 ? extends T 和 ? super&nb

    本文主要介紹了Java中 ? extends T 和 ? super T的理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 一文搞懂Java橋接方法

    一文搞懂Java橋接方法

    這篇文章主要介紹了Java中的橋接方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • TreeSet詳解和使用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    TreeSet詳解和使用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    TreeSet是一個(gè)有序的集合,它的作用是提供有序的Set集合。這篇文章主要介紹了TreeSet使用示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • springboot中不能獲取post請求參數(shù)的解決方法

    springboot中不能獲取post請求參數(shù)的解決方法

    這篇文章主要介紹了springboot中不能獲取post請求參數(shù)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 解決mybatis批量更新(update foreach)失敗的問題

    解決mybatis批量更新(update foreach)失敗的問題

    這篇文章主要介紹了解決mybatis批量更新(update foreach)失敗的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Mybatis實(shí)現(xiàn)一對一查詢映射處理

    Mybatis實(shí)現(xiàn)一對一查詢映射處理

    MyBatis是一種流行的Java持久化框架,它提供了靈活而強(qiáng)大的查詢映射功能,本文主要介紹了Mybatis實(shí)現(xiàn)一對一查詢映射處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評論

永靖县| 峨山| 古浪县| 桓台县| 宁河县| 宜兰县| 麻阳| 黑龙江省| 景洪市| 民权县| 河东区| 英吉沙县| 上高县| 赤峰市| 延津县| 蒲江县| 长治市| 南康市| 广元市| 林芝县| 赤峰市| 博乐市| 承德县| 抚顺县| 化德县| 刚察县| 海南省| 信阳市| 同心县| 剑川县| 揭西县| 乐陵市| 石家庄市| 昔阳县| 封丘县| 穆棱市| 香港 | 罗甸县| 广西| 闸北区| 榆社县|