Java如何生成隨機數不了解下嗎
一、Random類介紹
在 Java 中使用 Random
工具類來生成隨機數,該類在 java.util
包下,在 JDK1.0 版本就存在了。Random
單詞本身就是隨機、隨意、任意的意思。Random
是一個普通類,所以在使用時需要創(chuàng)建 Random
對象,在調用其提供的方法。
public class Random implements java.io.Serializable {}
Random
類提供了諸多方法,如下圖:
二、Random類生成隨機數
1.生成隨機數
在 Java 中,可以使用 java.util.Random
類來生成隨機數。 Random
類提供了多個方法來生成不同種類的隨機數,例如 nextInt()
、nextDouble()
等。
我們這里演示如何生成一個介于0到9之間的隨機整數:
import java.util.Random; public class RandomTest { public static void main(String[] args) { // 創(chuàng)建Random實例 Random random = new Random(); // 生成0到9之間的隨機數 int randomNum = random.nextInt(10); System.out.println(randomNum); } }
在上面的示例代碼中,首先創(chuàng)建了一個 Random
對象,然后使用 nextInt()
方法生成一個介于0到9之間的隨機整數,并將結果打印到控制臺上。
2.nextInt()方法
nextInt(int bound)
方法是 Random
類的一個實例方法,它用于生成一個介于0(包括0)和指定值(不包括該值)之間的隨機整數。
我們之前使用 nextInt(int bound)
方法生成 0-9 之間的隨機數:
Random random = new Random(); int randomNum = random.nextInt(10); System.out.println(randomNum);
代碼中使用 Random
類的默認構造函數創(chuàng)建一個隨機數生成器對象,然后調用 nextInt(int bound)
方法生成介于 0(包括 0)和 10(不包括 10)之間的隨機整數(多次提及且加粗),最后將結果存儲到 randomNum
變量中并打印到控制臺上。
這個方法的實現原理是根據隨機數生成器的內部狀態(tài)生成隨機數。如果指定的 bound
參數是正數,則生成的隨機數即為 0 到 bound
之間的某個整數。如果 bound
是負數或者 0,則會拋出 IllegalArgumentException
異常。需要注意的是,生成的隨機數是偽隨機數,其實際上是一個確定性的函數,但是它的表現看上去是隨機的。
對于 Random.nextInt(int bound)
方法,需要特別注意 bound
參數的取值范圍。如果生成的隨機數不是 0 到 bound
之間,那么就可能會對一些應用產生負面影響,比如在密碼學應用中可能會導致漏洞。因此,在使用該方法時,需要仔細檢查 bound
參數的取值范圍,并對其進行適當的限制。
那么除了 nextInt()
方法,還有 nextLong()
、nextBoolean()
、nextFloat()
、nextDouble()
等。
三、使用場景
Java 隨機數生成器可以在很多場景下使用,比如在游戲開發(fā)中,可以隨機生成怪物、地圖、道具等;如果涉及密碼,可以在加密過程中需要生成隨機數,如在生成密鑰的時候生成長度隨機的鹽值;也可以進行測試和演練:可以使用隨機數生成器來生產測試數據、觀測數據等等;
總之,隨機數的使用非常廣泛,任何需要模擬隨機的場景都可以使用 Java 提供的隨機數生成器生成隨機數。
我們大都有選擇困難癥,比如不知道午飯吃什么?很頭疼!那就讓上天來決定吧!我們使用 Java 隨機數來隨意抽取或是決定午飯。
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到可選菜品數量之間的一個隨機整數 String lunch = foods[index]; // 根據隨機數選定菜品 System.out.println("午飯吃" + lunch); } }
上面的代碼中,首先定義了一個數組中,存儲了可以選擇的午餐品種。然后使用 java.util.Random
類創(chuàng)建一個隨機數生成器對象,使用 nextInt(int bound)
方法生成一個介于 0 和可選菜品數量之間的隨機數。最后,使用這個隨機數從菜品數組中選擇一個菜品,將其存儲到字符串變量 lunch
中,并輸出午餐的選擇結果。
在實際開發(fā)中,可以將類似的代碼集成到提供菜品選擇功能的系統(tǒng)中,方便辦公室的小伙伴們快速決定午餐。
四、官方提示
java.util.Random
的實例是線程安全的。但是,跨線程并發(fā)使用同一個 java.util.Random
實例可能會遇到爭用,從而導致性能下降。考慮在多線程設計中使用 java.util.concurrent.ThreadLocalRandom
。
java.util.Random
的實例不是加密安全的。請考慮使用 java.security.SecureRandom
來獲得加密安全的偽隨機數生成器,以供對安全性敏感的應用程序使用。
總結
Java 隨機數的使用場景還是很多的,所以我們要對其進行掌握,本文對 Java 生成隨機數的類 Random
進行了簡單介紹,如果想深入了解,要查看其源碼,去實操,去探究。
到此這篇關于Java如何生成隨機數不了解下嗎的文章就介紹到這了,更多相關Java隨機數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中IO流 RandomAccessFile類實例詳解
這篇文章主要介紹了Java中IO流 RandomAccessFile類實例詳解的相關資料,需要的朋友可以參考下2017-05-05通過Java?Reflection實現編譯時注解正確處理方法
Java注解是一種標記在JDK5及以后的版本中引入,用于Java語言中向程序添加元數據的方法,這篇文章主要介紹了通過Java?Reflection實現編譯時注解處理方法,需要的朋友可以參考下2023-06-06MyBatis插入Insert、InsertSelective的區(qū)別及使用心得
這篇文章主要介紹了MyBatis插入Insert、InsertSelective的區(qū)別及使用心得,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Java Flink窗口觸發(fā)器Trigger的用法詳解
Trigger(窗口觸發(fā)器)決定了窗口(由 WindowAssigner 產生)什么時候調用窗口處理函數??梢愿鶕付ǖ臅r間或數據元素條件來決定什么時候觸發(fā)。本文將詳細講講其用法,需要的可以參考一下2022-07-07完全解析Java編程中finally語句的執(zhí)行原理
這篇文章主要深度介紹了Java編程中finally語句的執(zhí)行原理,細致講解了finally在異常處理中的流程控制作用,需要的朋友可以參考下2015-11-11Netty分布式FastThreadLocal的set方法實現邏輯剖析
這篇文章主要為大家介紹了Netty分布式FastThreadLocal的set方法實現邏輯剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03SpringCloud GateWay動態(tài)路由用法
網關作為所有項目的入口,不希望重啟,因此動態(tài)路由是必須的,動態(tài)路由主要通過RouteDefinitionRepository接口實現,其默認的實現是InMemoryRouteDefinitionRepository,即在內存中存儲路由配置,可基于這個map對象操作,動態(tài)路由的實現方案有兩種2024-10-10