Java如何生成隨機(jī)數(shù)不了解下嗎
一、Random類介紹
在 Java 中使用 Random 工具類來生成隨機(jī)數(shù),該類在 java.util 包下,在 JDK1.0 版本就存在了。Random 單詞本身就是隨機(jī)、隨意、任意的意思。Random 是一個(gè)普通類,所以在使用時(shí)需要?jiǎng)?chuàng)建 Random 對(duì)象,在調(diào)用其提供的方法。
public class Random implements java.io.Serializable {}Random 類提供了諸多方法,如下圖:

二、Random類生成隨機(jī)數(shù)
1.生成隨機(jī)數(shù)
在 Java 中,可以使用 java.util.Random 類來生成隨機(jī)數(shù)。 Random 類提供了多個(gè)方法來生成不同種類的隨機(jī)數(shù),例如 nextInt()、nextDouble() 等。
我們這里演示如何生成一個(gè)介于0到9之間的隨機(jī)整數(shù):
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
// 創(chuàng)建Random實(shí)例
Random random = new Random();
// 生成0到9之間的隨機(jī)數(shù)
int randomNum = random.nextInt(10);
System.out.println(randomNum);
}
}在上面的示例代碼中,首先創(chuàng)建了一個(gè) Random 對(duì)象,然后使用 nextInt() 方法生成一個(gè)介于0到9之間的隨機(jī)整數(shù),并將結(jié)果打印到控制臺(tái)上。
2.nextInt()方法
nextInt(int bound) 方法是 Random 類的一個(gè)實(shí)例方法,它用于生成一個(gè)介于0(包括0)和指定值(不包括該值)之間的隨機(jī)整數(shù)。
我們之前使用 nextInt(int bound) 方法生成 0-9 之間的隨機(jī)數(shù):
Random random = new Random(); int randomNum = random.nextInt(10); System.out.println(randomNum);
代碼中使用 Random 類的默認(rèn)構(gòu)造函數(shù)創(chuàng)建一個(gè)隨機(jī)數(shù)生成器對(duì)象,然后調(diào)用 nextInt(int bound) 方法生成介于 0(包括 0)和 10(不包括 10)之間的隨機(jī)整數(shù)(多次提及且加粗),最后將結(jié)果存儲(chǔ)到 randomNum 變量中并打印到控制臺(tái)上。
這個(gè)方法的實(shí)現(xiàn)原理是根據(jù)隨機(jī)數(shù)生成器的內(nèi)部狀態(tài)生成隨機(jī)數(shù)。如果指定的 bound 參數(shù)是正數(shù),則生成的隨機(jī)數(shù)即為 0 到 bound 之間的某個(gè)整數(shù)。如果 bound 是負(fù)數(shù)或者 0,則會(huì)拋出 IllegalArgumentException 異常。需要注意的是,生成的隨機(jī)數(shù)是偽隨機(jī)數(shù),其實(shí)際上是一個(gè)確定性的函數(shù),但是它的表現(xiàn)看上去是隨機(jī)的。
對(duì)于 Random.nextInt(int bound) 方法,需要特別注意 bound 參數(shù)的取值范圍。如果生成的隨機(jī)數(shù)不是 0 到 bound 之間,那么就可能會(huì)對(duì)一些應(yīng)用產(chǎn)生負(fù)面影響,比如在密碼學(xué)應(yīng)用中可能會(huì)導(dǎo)致漏洞。因此,在使用該方法時(shí),需要仔細(xì)檢查 bound 參數(shù)的取值范圍,并對(duì)其進(jìn)行適當(dāng)?shù)南拗啤?/p>
那么除了 nextInt() 方法,還有 nextLong()、nextBoolean()、nextFloat()、nextDouble() 等。
三、使用場(chǎng)景
Java 隨機(jī)數(shù)生成器可以在很多場(chǎng)景下使用,比如在游戲開發(fā)中,可以隨機(jī)生成怪物、地圖、道具等;如果涉及密碼,可以在加密過程中需要生成隨機(jī)數(shù),如在生成密鑰的時(shí)候生成長(zhǎng)度隨機(jī)的鹽值;也可以進(jìn)行測(cè)試和演練:可以使用隨機(jī)數(shù)生成器來生產(chǎn)測(cè)試數(shù)據(jù)、觀測(cè)數(shù)據(jù)等等;
總之,隨機(jī)數(shù)的使用非常廣泛,任何需要模擬隨機(jī)的場(chǎng)景都可以使用 Java 提供的隨機(jī)數(shù)生成器生成隨機(jī)數(shù)。
我們大都有選擇困難癥,比如不知道午飯吃什么?很頭疼!那就讓上天來決定吧!我們使用 Java 隨機(jī)數(shù)來隨意抽取或是決定午飯。
import java.util.Random;
public class RandomLunch {
public static void main(String[] args) {
String[] foods = {"漢堡", "炸雞", "披薩", "烤肉", "牛肉面", "米線", "酸菜魚", "煲仔飯", "火鍋", "小籠包"}; //可以選擇的午餐品種
Random random = new Random();
int index = random.nextInt(foods.length); // 生成0到可選菜品數(shù)量之間的一個(gè)隨機(jī)整數(shù)
String lunch = foods[index]; // 根據(jù)隨機(jī)數(shù)選定菜品
System.out.println("午飯吃" + lunch);
}
}上面的代碼中,首先定義了一個(gè)數(shù)組中,存儲(chǔ)了可以選擇的午餐品種。然后使用 java.util.Random 類創(chuàng)建一個(gè)隨機(jī)數(shù)生成器對(duì)象,使用 nextInt(int bound) 方法生成一個(gè)介于 0 和可選菜品數(shù)量之間的隨機(jī)數(shù)。最后,使用這個(gè)隨機(jī)數(shù)從菜品數(shù)組中選擇一個(gè)菜品,將其存儲(chǔ)到字符串變量 lunch 中,并輸出午餐的選擇結(jié)果。
在實(shí)際開發(fā)中,可以將類似的代碼集成到提供菜品選擇功能的系統(tǒng)中,方便辦公室的小伙伴們快速?zèng)Q定午餐。
四、官方提示
java.util.Random 的實(shí)例是線程安全的。但是,跨線程并發(fā)使用同一個(gè) java.util.Random 實(shí)例可能會(huì)遇到爭(zhēng)用,從而導(dǎo)致性能下降??紤]在多線程設(shè)計(jì)中使用 java.util.concurrent.ThreadLocalRandom。
java.util.Random 的實(shí)例不是加密安全的。請(qǐng)考慮使用 java.security.SecureRandom 來獲得加密安全的偽隨機(jī)數(shù)生成器,以供對(duì)安全性敏感的應(yīng)用程序使用。
總結(jié)
Java 隨機(jī)數(shù)的使用場(chǎng)景還是很多的,所以我們要對(duì)其進(jìn)行掌握,本文對(duì) Java 生成隨機(jī)數(shù)的類 Random 進(jìn)行了簡(jiǎn)單介紹,如果想深入了解,要查看其源碼,去實(shí)操,去探究。
到此這篇關(guān)于Java如何生成隨機(jī)數(shù)不了解下嗎的文章就介紹到這了,更多相關(guān)Java隨機(jī)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java生成N個(gè)不重復(fù)的隨機(jī)數(shù)的三種方法總結(jié)
- 如何通過Java生成一個(gè)隨機(jī)數(shù)
- Java生成隨機(jī)數(shù)之Random與ThreadLocalRandom性能比較詳解
- java并發(fā)高的情況下用ThreadLocalRandom來生成隨機(jī)數(shù)
- java的三種隨機(jī)數(shù)生成方式
- Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解
- Java生成的隨機(jī)數(shù)靠譜嗎?多少次會(huì)重復(fù)?
- Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù)
- JAVA 16位ID生成工具類含16位不重復(fù)的隨機(jī)數(shù)數(shù)字+大小寫
- java中生成任意之間數(shù)的隨機(jī)數(shù)詳解
- JavaSE API實(shí)現(xiàn)生成隨機(jī)數(shù)的2種方法(Random類和Math類的Random方法)
相關(guān)文章
使用Spring Context實(shí)現(xiàn)消息隊(duì)列的示例代碼
在現(xiàn)代分布式系統(tǒng)中,消息隊(duì)列是一個(gè)非常重要的組件,它可以解耦系統(tǒng)的各個(gè)部分,提高系統(tǒng)的可伸縮性和可靠性,本文將詳細(xì)介紹如何使用Spring Boot實(shí)現(xiàn)消息隊(duì)列,包括消息的發(fā)送和接收,需要的朋友可以參考下2025-10-10
基于Springboot疫苗接種行程管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
本文主要介紹了基于Springboot實(shí)現(xiàn)的疫苗接種行程管理系統(tǒng)的示例代碼,系統(tǒng)主要實(shí)現(xiàn)個(gè)人疫苗接種管理、行程管理、病史管理、風(fēng)險(xiǎn)地區(qū)管理、核酸檢測(cè)報(bào)告結(jié)果上報(bào)、疫情新聞管理等功能,需要的可以參考一下2022-03-03
SpringBoot常用注解,thymeleaf,數(shù)據(jù)提交的實(shí)現(xiàn)
SpringBoot簡(jiǎn)化了微服務(wù)配置,提供快速啟動(dòng)和內(nèi)嵌容器化web項(xiàng)目,常用注解包括@Component、@RestController等,Thymeleaf為前端頁面渲染提供支持,數(shù)據(jù)提交時(shí)需使用@RequestBody注解2026-01-01
工作中禁止使用Executors快捷創(chuàng)建線程池原理詳解
這篇文章主要為大家介紹了工作中禁止使用Executors快捷創(chuàng)建線程池原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解
這篇文章主要介紹了Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解,Java NIO(New IO)是Java平臺(tái)提供的一種用于高效處理I/O操作的API,它引入了一組新的類和概念,以提供更好的性能和可擴(kuò)展性,需要的朋友可以參考下2023-09-09
Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹
Spring在3.1版本,就提供了一條基于注解的緩存策略,實(shí)際使用起來還是很絲滑的,本文將針對(duì)幾個(gè)常用的注解進(jìn)行簡(jiǎn)單的介紹說明,有需要的小伙伴可以嘗試一下2021-07-07
java 實(shí)現(xiàn) stack詳解及實(shí)例代碼
這篇文章主要介紹了java 實(shí)現(xiàn) stack詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09
SpringBoot+vue實(shí)現(xiàn)登錄圖片驗(yàn)證碼功能
這篇文章主要給大家介紹一下如何SpringBoot+vue實(shí)現(xiàn)登錄圖片驗(yàn)證碼功能,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07
Java程序中添加播放MIDI音樂功能的實(shí)現(xiàn)方法詳解
本篇文章是對(duì)在Java程序中添加播放MIDI音樂功能的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
詳談jvm--Java中init和clinit的區(qū)別
下面小編就為大家?guī)硪黄斦刯vm--Java中init和clinit的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10

