Java生成随机数原理_JAVA随机数生成的机制
一般我們都稱計(jì)算機(jī)給的隨機(jī)數(shù)為偽隨機(jī)數(shù),因?yàn)樗鼈兌疾皇钦娴碾S機(jī)的。你可能更愿意相信這些情況。即使他們是隨機(jī)的,它們也在等待著我們的指示。當(dāng)然也的確有些特定的方法,來(lái)生成它們。但我們可以聯(lián)想到某個(gè)黑盒或我們的面包機(jī),而這是個(gè)隨機(jī)數(shù)生成器。于是你找到這個(gè)生成器說,嘿 生成器你發(fā)出一個(gè)信息,我得到了這個(gè)信息就是 下一個(gè)隨機(jī)數(shù)。而它會(huì)返回一個(gè)于你來(lái)說隨機(jī)的數(shù),然后你說給我下一個(gè) 它又給你下一個(gè)。就是這么工作的。就想一個(gè)黑盒,你不管里面什么構(gòu)造,對(duì)你來(lái)說就像是個(gè)面包機(jī)。
所以作為客戶,如何使用這些隨機(jī)數(shù)生成器呢?
你需要先導(dǎo)入隨機(jī)數(shù)生成器的庫(kù),才能收獲隨機(jī)數(shù)生成器。
關(guān)于隨機(jī)數(shù)生成器,比較有意思的是,生成器和以往的類別不同。
當(dāng)我們需要類的某個(gè)對(duì)象時(shí),我們說new就會(huì)得到一個(gè)新的對(duì)象。
隨機(jī)數(shù)生成器有點(diǎn)不同,這里通過一個(gè)靜態(tài)方法來(lái)獲得實(shí)例對(duì)象,而不是通過new的構(gòu)造器來(lái)生成。
此時(shí)有趣的是,當(dāng)我們用到它時(shí),我們希望能在所有方法里都是用同一個(gè)對(duì)象。所以你會(huì)說,你不是說過當(dāng)我聲明一個(gè)變量,這個(gè)變量只能在它被聲明的方法內(nèi)存在嗎,所以怎么辦?如果我們想要一個(gè)這種對(duì)象,我需要在每個(gè)方法內(nèi)都調(diào)用一次嗎?答案是:不用,有一個(gè)辦法,如果我希望某個(gè)對(duì)象或變量,都能被我整個(gè)類別中的所以方法共用,我們就要用到 實(shí)例變量。
實(shí)例變量:意思就是,我想要一個(gè)存在于整個(gè)對(duì)象中的變量,而令所以方法都能指向這個(gè)相同的變量。
因此我們有必要比較一下實(shí)例變量和局部變量。關(guān)于他們?nèi)绾伪宦暶?#xff0c;我們?nèi)绾问褂盟鼈儭K鼈兊慕Y(jié)構(gòu),以及為什么會(huì)使用它們。
實(shí)例變量是在類里面被聲明,而不是在方法里。
局部變量對(duì)應(yīng)局部運(yùn)算。
全局變量是一種很不好的數(shù)據(jù)類型,讓你們遠(yuǎn)離它的方法,就是不告訴你們。
隨機(jī)數(shù)生成器的原理:很奇怪的是,當(dāng)你找它要一個(gè)數(shù),比方說它給你5,然后我們偷偷把生成器里的普通咖啡換成了咖啡片,它偷偷地干了什么呢?它偷偷地保存了這個(gè)數(shù)(5),并且將之用在某個(gè)復(fù)雜的方程中,而你不需要關(guān)心這個(gè)方程是如何的,因?yàn)樯上乱粋€(gè)數(shù)字的是這個(gè)黑盒。當(dāng)你需要下一個(gè)數(shù)時(shí),它就會(huì)對(duì)5動(dòng)手腳,而后給你新的東西。所以問題是,你不知道這個(gè)生成器從哪個(gè)數(shù)開始,實(shí)際上它從哪個(gè)數(shù)開始和你計(jì)算機(jī)上的時(shí)間有關(guān),將一秒鐘60等分甚至千等分。所以大多數(shù)人不知道怎么回事,如果你不知道它怎么來(lái)的,你也就不知道這隨機(jī)數(shù)列是什么。唯一的問題是,如果你不知道它怎么來(lái)的,你運(yùn)行了程序突然出錯(cuò)了,第一次它在17的時(shí)候死機(jī),你就想著要把這個(gè)錯(cuò)誤找出來(lái),于是你重新運(yùn)行程序,這次你得到了個(gè)6,程序正常…我要你每次都用同一條序列的隨機(jī)數(shù),就抓喲指定每次開始的那個(gè)數(shù),那么你就能從這個(gè)數(shù)開始每次都生成同一序列的隨機(jī)數(shù)。如果開始的數(shù)是1,每次你說nextRandom,你得到的都是來(lái)自相同序列的隨機(jī)數(shù),比如7、5、9、2、3。下次運(yùn)行時(shí)還是這個(gè)序列,這樣調(diào)試起來(lái)就很輕松了。
Q&A:
seed不定要在區(qū)間內(nèi),多數(shù)情況下 seed的值是完全不相關(guān)的,基本上你在調(diào)試時(shí)才把它加進(jìn)去。當(dāng)你程序能運(yùn)行時(shí),把它拿出來(lái)。看看程序是否還運(yùn)行。
如果在不同的計(jì)算機(jī)上用相同的seed,會(huì)得到相同的序列嗎?
答案是YES.
總結(jié)
以上是生活随笔為你收集整理的Java生成随机数原理_JAVA随机数生成的机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: polyfit线性拟合函数
- 下一篇: java美元兑换,(Java实现) 美元