Java - 常用函數

來源:互聯網
上載者:User

標籤:java   random   類   對象   

http://blog.csdn.net/pipisorry/article/details/44411541

Random()函數產生隨機數 java.util.Random在Java的API協助文檔中,總結了一下對這個Random()函數功能的描述:1、java.util.Random類中實現的隨機演算法是偽隨機,也就是有規則的隨機,所謂有規則的就是在給定種(seed)的區間內隨機產生數字;2、相同種子數的Random對象,相同次數產生的隨機數字是完全相同的;3、Random類中各方法產生的隨機數字都是均勻分布的,也就是說區間內部的數字產生的幾率均等; Random()的兩種構造方法 1.Random():建立一個新的隨機數產生器。 2.Random(longseed):使用單個 long種子建立一個新的隨機數產生器。
我們可以在構造Random對象的時候指定種子(這裡指定種子有何作用,請接著往下看),如:Random r1 = new Random(20);或者預設當前系統時間對應的相對時間有關的數字作為種子數:Random r1 = new Random();需要說明的是:你在建立一個Random對象的時候可以給定任意一個合法的種子數,種子數只是隨機演算法的起源數字,和產生的隨機數的區間沒有任何關係。如下面的Java代碼:Random rand =new Random(25);int i;i=rand.nextInt(100);初始化時25並沒有起直接作用(注意:不是沒有起作用),rand.nextInt(100);中的100是隨機數的上限,產生的隨機數為0-100的整數,不包括100。
Random()方法 1.protectedint next(intbits):產生下一個偽隨機數。 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(intn):返回一個偽隨機數,它是取自此隨機數產生器序列的、在(包括和指定值(不包括)之間均勻分布的int值。 9.long nextLong():返回下一個偽隨機數,它是取自此隨機數產生器序列的均勻分布的long 值。 10.void setSeed(longseed):使用單個 long 種子設定此隨機數產生器的種子。

例子:
1.產生[0,1.0)區間的小數:double d1 =r.nextDouble();2.產生[0,5.0)區間的小數:double d2 = r.nextDouble()* 5;3.產生[1,2.5)區間的小數:double d3 = r.nextDouble()* 1.5 + 1;4.產生-231到231-1之間的整數:int n =r.nextInt();5.產生[0,10)區間的整數:int n2 = r.nextInt(10);//方法一n2 = Math.abs(r.nextInt() %10);//方法二
隨機數種子的作用:
例子來做說明: 
在定義的時候分別指定了相同的種子之後,在分別用r1和r2去[0,30)的隨機數,結果編譯執行後悔發現結果都是呈現AABB型的,說明r1和r2取的隨機數是一模一樣的(為實驗)。 如果我改動代碼,改成下面這樣: 
再編譯輸出後,就再也不會得到AABB型的結果,根據代碼的區別,就可以知道指定種子數,和不指定種子數的區別在於哪裡了。 




java.lang.Math.Random

調用這個Math.Random()函數能夠返回帶正號的double值,該值大於等於0.0且小於1.0,即取值範圍是[0.0,1.0)的左閉右開區間,返回值是一個偽隨機播放的數,在該範圍內(近似)均勻分布。


兩個隨機函數到底的特點:

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()會相對來說比較靈活一些。from:http://blog.csdn.net/pipisorry/article/details/44411541

ref:http://blog.sina.com.cn/s/blog_93dc666c0101h3gd.html



Java - 常用函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.