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