Java记录 -38- 随机数
Java隨機(jī)數(shù)
一.在Java里我們可以使用Math.random()方法來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù),這個(gè)產(chǎn)生的隨機(jī)數(shù)是0-1之間的一個(gè)double,我們可以把他乘以一定的數(shù),比如說(shuō)乘以100,他就是個(gè)100以?xún)?nèi)的隨機(jī)。
二.在java.util這個(gè)包里面提供了一個(gè)Random的類(lèi),我們可以新建一個(gè)Random的對(duì)象來(lái)產(chǎn)生隨機(jī)數(shù),他可以產(chǎn)生隨機(jī)整數(shù)、隨機(jī)float、隨機(jī)double,隨機(jī)long,這個(gè)是我們?cè)?/span>java程序里經(jīng)常用的一個(gè)取隨機(jī)數(shù)的方法。
三.在我們的System類(lèi)中有一個(gè)currentTimeMillis()方法,這個(gè)方法返回一個(gè)從1970年1月1號(hào)0點(diǎn)0分0秒到目前的一個(gè)毫秒數(shù),返回類(lèi)型是long,我們可以拿他作為一個(gè)隨機(jī)數(shù),我們可以拿他對(duì)一些數(shù)取模,就可以把他限制在一個(gè)范圍之內(nèi)。
各個(gè)詳解:
java.lang.Math.Random;
調(diào)用這個(gè)Math.Random()函數(shù)能夠返回帶正號(hào)的double值,該值大于等于0.0且小于1.0,即取值范圍是[0.0,1.0)的左閉右開(kāi)區(qū)間,返回值是一個(gè)偽隨機(jī)選擇的數(shù),在該范圍內(nèi)(近似)均勻分布。
int?num?=?(int)(Math.random()*3)
上面代碼中num的值會(huì)均勻的隨機(jī)分布在[0,3)之間!在使用Math.Random()的時(shí)候需要注意的地方時(shí)該函數(shù)是返回double類(lèi)型的值,所以在要賦值給其他類(lèi)型的變量的時(shí)候注意需要進(jìn)行類(lèi)型轉(zhuǎn)換。
java.util.Random;
在Java的API幫助文檔中,總結(jié)了一下對(duì)這個(gè)Random()函數(shù)功能的描述:
1、java.util.Random類(lèi)中實(shí)現(xiàn)的隨機(jī)算法是偽隨機(jī),也就是有規(guī)則的隨機(jī),所謂有規(guī)則的就是在給定種(seed)的區(qū)間內(nèi)隨機(jī)生成數(shù)字;
2、相同種子數(shù)的Random對(duì)象,相同次數(shù)生成的隨機(jī)數(shù)字是完全相同的;
3、Random類(lèi)中各方法生成的隨機(jī)數(shù)字都是均勻分布的,也就是說(shuō)區(qū)間內(nèi)部的數(shù)字生成的幾率均等;
下面是Java.util.Random()方法摘要
1.protected?int?next(int?bits):生成下一個(gè)偽隨機(jī)數(shù)。
2.boolean?nextBoolean():返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的均勻分布的boolean值。
3.void?nextBytes(byte[]?bytes):生成隨機(jī)字節(jié)并將其置于用戶(hù)提供的?byte?數(shù)組中。
4.double?nextDouble():返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在0.0和1.0之間均勻分布的?double值。
5.float?nextFloat():返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在0.0和1.0之間均勻分布float值。
6.double?nextGaussian():返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、呈高斯(“正態(tài)”)分布的double值,其平均值是0.0標(biāo)準(zhǔn)差是1.0。
7.int?nextInt():返回下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的?int?值。
8.int?nextInt(int?n):返回一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在(包括和指定值(不包括)之間均勻分布的int值。
9.long?nextLong():返回下一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的均勻分布的?long?值。
10.void?setSeed(long?seed):使用單個(gè)?long?種子設(shè)置此隨機(jī)數(shù)生成器的種子。
總結(jié):
最后再來(lái)簡(jiǎn)單對(duì)比一下這兩個(gè)隨機(jī)函數(shù)到底的特點(diǎn):
1.java.Math.Random()實(shí)際是在內(nèi)部調(diào)用java.util.Random()的,它有一個(gè)致命的弱點(diǎn),它和系統(tǒng)時(shí)間有關(guān),也就是說(shuō)相隔時(shí)間很短的兩個(gè)random比如:
double?a?=?Math.random();
double?b?=?Math.random();
即有可能會(huì)得到兩個(gè)一模一樣的double。
2.java.util.Random()在調(diào)用的時(shí)候可以實(shí)現(xiàn)和java.Math.Random()一樣的功能,而且他具有很多的調(diào)用方法,相對(duì)來(lái)說(shuō)比較靈活。所以從總體來(lái)看,使用java.util.Random()會(huì)相對(duì)來(lái)說(shuō)比較靈活一些。
轉(zhuǎn)載于:https://blog.51cto.com/zlfwmm/1696252
總結(jié)
以上是生活随笔為你收集整理的Java记录 -38- 随机数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Debug javascript ins
- 下一篇: Java基础学习总结(42)——Log4