JAVA基礎:九、隨機數

一、新內容(Util包)Random
 一、Java隨機數產生方式
 1、通過System.currentTimeMillis()來獲取一個當前時間毫秒數的long型數字。
  long ctms = System.currentTimeMillis();
  System.out.println(ctms);
  Date date = new Date();
  System.out.println(date.getTime());【當前時間和1970年格林威治時間之間的間隔數】
 2、通過Math.random()返回一個0.0-1.0之間的double值【Math在java.lang包,打開JDK API查看】
   double r1 =Math.random();
   System.out.println(r1);
 3、通過Random類來產生一個隨機數,這個是專業的的Random工具類,功能強大。
 二、Random類
 Random類中實現的隨機算法是僞隨機,也就是有規則的隨機。在進行隨機時,隨機算法的起源數字稱爲種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。
 相同種子數的Random對象,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。這點在生成多個隨機數字時需要特別注意。
 1、Random對象的生成
          Random類包含兩個構造方法,下面依次進行介紹:
 a、public Random()
 該構造方法使用一個和當前系統時間對應的相對時間有關的數字作爲種子數,然後使用這個種子數構造Random對象。
 b、public Random(long seed)
 該構造方法可以通過制定一個種子數進行創建。
 示例代碼:
 Random r = new Random();
 Random r1 = new Random(10);
 再次強調:種子數只是隨機算法的起源數字,和生成的隨機數字的區間無關。
 Random類中的方法比較簡單,每個方法的功能也很容易理解。需要說明的是,Random類中各方法生成的隨機數字都是均勻分佈的,也就是說區間內部的數字生成的機率是均等的。下面對這些方法做一下基本的介紹:
 a、public boolean nextBoolean()
 該方法的作用是生成一個隨機的boolean值,生成true和false的值機率相等,也就是都是50%的機率。
 b、public double nextDouble()
 該方法的作用是生成一個隨機的double值,數值介於[0,1.0)之間。
 c、public int nextInt()
 該方法的作用是生成一個隨機的int值,該值介於int的區間,也就是-231到231-1之間。
 如果需要生成指定區間的int值,則需要進行一定的數學變換,具體可以參看下面的使用示例中的代碼。
 d、public int nextInt(int n)
 該方法的作用是生成一個隨機的int值,該值介於[0,n)的區間,也就是0到n之間的隨機int值,包含0而不包含n。
 如果想生成指定區間的int值,也需要進行一定的數學變換,具體可以參看下面的使用示例中的代碼。
 e、public void setSeed(long seed)
 該方法的作用是重新設置Random對象中的種子數。設置完種子數以後的Random對象和相同種子數使用new關鍵字創建出的Random對象相同。
 Random r2= new Random();
 int result1 = r2.nextInt(100);
  System.out.println(result1);
 三、總結
 1、隨機數很常用,在Java有三種產生方式,以Random隨機數的使用最爲複雜。
   2、Random類對象有是否帶種子之分,帶種子的只要種子相同,多次運行,生成隨機數的結果總是那樣。
   3、帶種子隨機數的帶種子的對象創建方式有兩種,效果一樣。但是帶種子的隨機數用處似乎不大。
   4、Random的功能涵蓋了Math.random()的功能。
   5、可以通過隨機數去做實現隨機字符串等複雜的隨機數據。
   6、不要研究不重複的隨機數,意義不大。
 7、random方法的調用比較簡單,所以很多程序員都習慣使用Math類的random方法來生成隨機數字。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章