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

Java獲取隨機數(shù)的n種方法

 更新時間:2023年11月13日 09:08:06   作者:way_more  
項目中,我們常常會用到隨機數(shù),本文主要介紹了Java獲取隨機數(shù)的n種方法,具有一定的參考價值,感興趣的可以了解一下

前言

在項目中,我們常常會用到隨機數(shù),那你知道幾種隨機數(shù)的生成方法呢,在這里,分享一下我知道的隨機數(shù)生成方法

1、使用Math.random()方法

Math.random() 產(chǎn)生的隨機數(shù)是0-1之間的一個double數(shù)值,有15位小數(shù),我們可以把他乘以一定的數(shù),比如說乘以100,他就是個100以內(nèi)的隨機

Math.random()獲取到的隨機數(shù)如下

0.6195107792727859

如下,為獲取1到10的int類型隨機數(shù),+1表示最小值為1,因為random方法的最小值是0

(int)(1+Math.random()*10)

生成0到9的隨機數(shù),如下

(int)(Math.random()*10)

想要獲得比m小1的int或者long類型數(shù)值,只需要使用以下公式

(類型)(Math.random()*m)

想要獲得指定范圍[最小值,最大值]的隨機數(shù),使用以下公式

(數(shù)據(jù)類型)(最小值+Math.random()*(最大值-最小值+1))

例:獲取10到99的隨機數(shù)

(int)(Math.random()*90+10)

注意:Math.random() 產(chǎn)生的隨機數(shù)是大于等于0,小于1(不等于1)的double數(shù)值

2、Random類

通過Random類來產(chǎn)生一個隨機數(shù),這個是專業(yè)的Random工具類,功能強大。

使用方法如下:
(01) 創(chuàng)建Random對象。有兩種方法可以創(chuàng)建Random對象,如下:

Random random = new Random();//默認構(gòu)造方法
Random random = new Random(1000);//指定種子數(shù)字

(02) 通過Random對象獲取隨機數(shù)。Random支持的隨機值類型包括:boolean, byte, int, long, float, double。

比如,獲取[0, 100)之間的int整數(shù)。方法如下:
int i2 = random.nextInt(100);

構(gòu)造方法:

// 構(gòu)造函數(shù)(一): 創(chuàng)建一個新的隨機數(shù)生成器。 
Random() 
// 構(gòu)造函數(shù)(二): 使用單個 long 種子創(chuàng)建一個新隨機數(shù)生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機數(shù)生成器的狀態(tài)。
Random(long seed) 

常用方法:

boolean nextBoolean()         // 返回下一個“boolean類型”偽隨機數(shù)。 
void    nextBytes(byte[] buf) // 生成隨機字節(jié)并將其置于字節(jié)數(shù)組buf中。 
double  nextDouble()          // 返回一個“[0.0, 1.0) 之間的double類型”的隨機數(shù)。 
float   nextFloat()           // 返回一個“[0.0, 1.0) 之間的float類型”的隨機數(shù)。 
int     nextInt()             // 返回下一個“int類型”隨機數(shù)。 
int     nextInt(int n)        // 返回一個“[0, n) 之間的int類型”的隨機數(shù)。 
long    nextLong()            // 返回下一個“l(fā)ong類型”隨機數(shù)。 

提示:所以若非必要,不要設置隨機數(shù)種子。

因為在Java中,隨機數(shù)的產(chǎn)生取決于種子,隨機數(shù)和種子之間的關(guān)系遵從以下兩個規(guī)則:

種子不同,產(chǎn)生不同的隨機數(shù)。

種子相同,即使實例不同也產(chǎn)生相同的隨機數(shù)。

如下:

    Random random1=new Random(1000);
    Random random2=new Random(1000);
    for (int i=0;i<10;i++){
        System.out.print(random1.nextInt(100));

    }
    System.out.println();
    for (int i=0;i<10;i++){
        System.out.print(random2.nextInt(100));

    }

輸出

87357624924941456450
87357624924941456450

可以看到,兩個不同的實例,但輸出的隨機數(shù)是一模一樣的,這就是因為種子相同,所以我們一般不要指定一個種子。

Random()無參構(gòu)造方法使用的是一個時間值,所以每一次的seed值都不一樣

public Random() {
this(seedUniquifier() ^ System.nanoTime());
}

3、ThreadLocalRandom

ThreadLocalRandom類是Java 7新增的一個類,它是Random的增強版。在并發(fā)訪問的環(huán)境下,使用ThreadLocalRandom來代替Random可以減少多線程資源競爭,最終保證系統(tǒng)具有更好的線程安全性。

我們聯(lián)想一下ThreadLocal。ThreadLocal通過讓每一個線程復制一份變量,使得在每個線程對變量進行操作時實際是操作自己本地內(nèi)存里面的副本,從而避免了對共享變量進行同步。

實際上ThreadLocalRandom的實現(xiàn)也是這個原理,Random的缺點是多個線程會使用同一個原子性種子變量,從而導致對原子變量更新的競爭。

ThreadLocalRandom類的用法與Random類的用法基本相似,它提供了一個靜態(tài)的current()方法來獲取ThreadLocalRandom對象,獲取該對象之后即可調(diào)用各種nextInt()方法來獲取偽隨機數(shù)了。

ThreadLocalRandom與Random都比Math的random()方法提供了更多的方式來生成各種偽隨機數(shù)??梢陨筛↑c類型的偽隨機數(shù),也可以生成整型類型的偽隨機數(shù),還可以指定生成隨機數(shù)的范圍。

ThreadLocalRandom rand = ThreadLocalRandom.current();
//生成一個4~20的偽隨機整數(shù)
int val1 = rand.nextInt(4 , 20);
//生成一個2.0~10.0之間的偽隨機浮點數(shù)
double val2 = rand.nextDouble(2.0 , 10.0);

4、UUID

UUID是jdk1.5中新增的一個類,在java.util下,用它可以產(chǎn)生一個號稱全球唯一的ID

UUID生成的形式如下,會有-,所以我們一般會把-去掉

aec0ae4d-59f9-4070-8c5b-13c00a4611b6

使用:

String uuid = UUID.randomUUID().toString();
uuid = uuid.replace("-", "");

5、 獲取字母和數(shù)字的隨機數(shù)

如果我們想獲取一個字母和數(shù)字的隨機數(shù),我們可以使用以下方法

 public static final String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

 public static String getRandomString(int length){
     
     Random random=new Random();
     StringBuffer sb=new StringBuffer();
     for(int i=0;i<length;i++){
       int number=random.nextInt(62);
       sb.append(str.charAt(number));
     }
     return sb.toString();
 }

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

相關(guān)文章

  • Java中MD5加密詳細指南及原理解析

    Java中MD5加密詳細指南及原理解析

    本文詳解Java中MD5加密的實現(xiàn)原理、應用場景、安全缺陷及替代方案,涵蓋基礎代碼、性能優(yōu)化和安全增強技術(shù),推薦使用更安全的SHA-256或bcrypt,感興趣的朋友跟隨小編一起看看吧
    2025-06-06
  • Java兩個變量的互換(不借助第3個變量)具體實現(xiàn)方法

    Java兩個變量的互換(不借助第3個變量)具體實現(xiàn)方法

    這篇文章主要介紹了Java兩個變量的互換(不借助第3個變量)具體實現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • 基于java計算買賣股票的最佳時機

    基于java計算買賣股票的最佳時機

    這篇文章主要介紹了基于java計算買賣股票的最佳時機,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java實現(xiàn)Jar文件的遍歷復制與文件追加

    Java實現(xiàn)Jar文件的遍歷復制與文件追加

    這篇文章主要為大家詳細介紹了如何利用Java實現(xiàn)Jar文件的遍歷復制與文件追加功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • Java入門異常處理最佳實踐

    Java入門異常處理最佳實踐

    本文詳細介紹了Java異常處理的核心概念、體系結(jié)構(gòu)、處理方式、執(zhí)行流程,并提供了實現(xiàn)自定義異常的方法和開發(fā)中的最佳實踐,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java 如何優(yōu)雅的拷貝對象屬性

    Java 如何優(yōu)雅的拷貝對象屬性

    這篇文章主要介紹了Java 如何優(yōu)雅的拷貝對象屬性,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-11-11
  • Java中字符串String的+和+=及循環(huán)操作String原理詳解

    Java中字符串String的+和+=及循環(huán)操作String原理詳解

    Java編譯器在編譯時對String的+和+=操作會創(chuàng)建StringBuilder對象來進行字符串的拼接,下面這篇文章主要給大家介紹了關(guān)于Java中字符串String的+和+=及循環(huán)操作String原理的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • SpringBoot FailureAnalyzer實例使用教程

    SpringBoot FailureAnalyzer實例使用教程

    FailureAnalyzer是一種在啟動時攔截exception并將其轉(zhuǎn)換為human-readable消息的好方法,包含在故障分析中。SpringBoot為application context相關(guān)的exceptions,JSR-303驗證等提供了這樣的分析器,實際上很容易創(chuàng)建自己的
    2022-12-12
  • 詳解Java設計模式——命令模式

    詳解Java設計模式——命令模式

    這篇文章主要介紹了Java設計模式——命令模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java獲取本機IP的幾種常見方法

    Java獲取本機IP的幾種常見方法

    在Java編程中,我們經(jīng)常需要獲取本地或遠程計算機的IP地址,IP地址是用于唯一標識計算機的一組數(shù)字,它在網(wǎng)絡通信中起到重要的作用,下面將介紹幾種在Java中獲取IP地址的方法,并提供相應的源代碼,需要的朋友可以參考下
    2025-05-05

最新評論

青州市| 呈贡县| 张家口市| 盐池县| 和静县| 荥经县| 富川| 万源市| 苏尼特右旗| 汪清县| 兴化市| 新野县| 罗山县| 南开区| 彩票| 和硕县| 共和县| 巴彦淖尔市| 新郑市| 普安县| 田东县| 红桥区| 思南县| 大英县| 吉安县| 乌兰浩特市| 定南县| 崇阳县| 石棉县| 胶州市| 黎城县| 福贡县| 建宁县| 潍坊市| 游戏| 紫云| 瓮安县| 明溪县| 织金县| 孙吴县| 安岳县|