您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“Java Random類里的種子問題怎么解決”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Java Random類里的種子問題怎么解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
可以說在現(xiàn)在的計算機語言里面,以及普通用戶這里,都是沒有辦法獲得真正的 隨機數(shù)的。真正的隨機數(shù)現(xiàn)在也只有在量子計算機當(dāng)中才有獲得。
所以我們現(xiàn)在所說的隨機數(shù),也可以稱為偽隨機數(shù),偽隨機數(shù)是通過一種算法并且結(jié)合當(dāng)下一個有規(guī)律其不斷改變的數(shù)(比如時間)獲得的結(jié)果。
我們將這種通過算法集合時間作為初始獲得隨機數(shù)的基準(zhǔn)的數(shù)據(jù)稱為種子。
Java當(dāng)中創(chuàng)建隨機數(shù)的方式是有兩種的:
第以種就是直接創(chuàng)建Random對象
Random random = new Random();
在底層就會調(diào)用這個方法來得到種子:
第二種就是將自己創(chuàng)建的種子傳進去:
Random random = new Random(5);
在源碼里我們可以直接看出種子的數(shù)據(jù)類型為long型,是長整形。
所以我們現(xiàn)在就有一種辦法,在它最開始生成Random對象的時候,獲得它生成的種子,然后將獲得的種子又傳入創(chuàng)建Random的對象當(dāng)中。是不是就可以獲得上面一模一樣的隨機數(shù)了?
先拿java語言來實現(xiàn)一下:
import java.util.Random; public class Demo02 { public static void main(String[] args) { Random random = new Random(5);//在這將5作為種子傳入 System.out.println("第一次調(diào)用:"); for (int i = 0; i < 5; i++) { System.out.print(random.nextInt(10) + "\t"); //獲得10以內(nèi)的隨機數(shù)(不包括10) } random.setSeed(5);//在這再將種子5傳入Random的種子當(dāng)中 System.out.println("\n第二次調(diào)用:"); for (int i = 0; i < 5; i++) { System.out.print(random.nextInt(10) + "\t"); } } }
在這明顯的看出,這個隨機數(shù)是一點都不隨機的。兩次只要種子一樣,就能返回相同的結(jié)果。
在這我再用python語言在實現(xiàn)一次這個功能(主要是java當(dāng)中沒有能調(diào)用輸出當(dāng)前種子的方法)。用python有一個更好的理解。
在python里面我會更加詳細(xì)的寫清注釋,詳細(xì)不會很難理解不了的。
import random #導(dǎo)入random內(nèi)庫 x = random.getstate() # 獲得當(dāng)前random里的種子 print('第一次循環(huán):') #輸入語句 for i in range(5): #for循環(huán) for i in range(5) ===》 for (int i = 0; i < 5; i++) #在python里面并沒喲什么大括號去吧什么括起來,而是要注意鎖定,一個鎖定就是一個整體 print(random.randint(1, 10), end='\t') #random.randint(1, 10)生成1~10(不包括10)的隨機數(shù), # end='\t'表示當(dāng)前print沒有結(jié)束,還有一個制表符的鍵位,也就不換行了 print('\n第二次循環(huán)') random.setstate(x)#將上面獲得的種子再次傳入進去 for i in range(5): #這里和上面一樣,循環(huán)出5次 print(random.randint(1, 10), end='\t')
讀到這里,這篇“Java Random類里的種子問題怎么解決”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。