黑馬面試相關java技術總結date類、calendar和random_第1頁
黑馬面試相關java技術總結date類、calendar和random_第2頁
黑馬面試相關java技術總結date類、calendar和random_第3頁
黑馬面試相關java技術總結date類、calendar和random_第4頁
已閱讀5頁,還剩6頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Random 類- android 培訓、java 培訓、期待與您交流! -java.util 包java.util 包是 Java 語言提供的工具類包,該包中包含了如日期、隨機數和數據結構實現類等一系列的工具類實現,是學習 Java 語言的基礎包之一。本部分就以 Java 語言中常用的時間和日期處理、隨機數處理以及集合框架為基礎進行介紹。時間和日期處理使用程序進行時間和日期處理,是程序員必須的一種常用技能,在不同的程序設計語言中提供了不同的格式進行實現,現在就介紹一下 Java 語言中的實現方式,以及基本的應用,使得對于 Java 語言的時間和日期處理技術有比較全面的認識。在程序中,某個固定

2、的時間代表的都是一個時間點,也就是一個時間的瞬間,例如 2009 年3 月 8 日 15 點 50 分 0 秒,在實際的應用中,經常需要對于兩個時間進行比較或計算時間之間的差值,這些功能在 Java 語言中都可以很方便的實現。在 Java毫秒。在 Java語言中,時間的表達是毫秒。也就是說,Java 語言中的時間處理可以精確到語言中,表達時間的方式有兩種:絕對時間。以直觀的形式來表達某個時間點,例如 2009 年 10 月 10 號 0 點 0 分 0 秒。使用這種形式表達時間,使用起來比較直觀,但是不方便進行時間之間的計算。例如無法很直觀的計算 2020 年 1 月 1 號 0 點 0 分

3、0 秒和上面這個時間之間相差多少天。絕對時間以對象的形式進行表達,Java API 中提供了 java.util 包中的 Date 類和 Calendar 類的對象進行表達。:相對時間。以一個 long 型的數字表達某個時間點。例如 102847423468。使用這種方式的優缺點和絕對時間剛好相反。這種方式很方便時間之間的計算,但是閱讀起來很不直觀。在Java API 中以需要表達的時間點,例如 2009 年 10 月 10 號 0 點 0 分 0 秒,和 GMT(格時間,也就是倫敦時間)1970 年 1 月 1 號 0 點 0 分 0 秒之間相差的毫秒數作為相對時間的數值,如果該時間在這個時

4、間只好,則相對時間為正數,否則相對時間為負數。Java API 中提供了 java.lang 包中的System 類的 currentTimeMillis 方法,獲得以相對時間形式描述的當前系統時間。在實際使用時,絕對時間和相對時間之間可以很方便的進行轉換。Date 類在 JDK1.0 中,Date時間的類,但是由于 Date 類不便于實現類是唯一的一,所以從 JDK1.1 版本開始,使用 Calendar 類進行時間和日期處理。這里簡單介紹一下Date 類的使用。:使用 Date 類代表當前系統時間Date d = new Date();System.out.prln(d);使用 Date

5、類的默認構造方法創建出的對象就代表當前時間,由于 Date 類覆蓋了 toString技術總結Date 類、Calendar 類和方法,所以可以直接輸出 Date 類型的對象,顯示的結果如下:Sun Mar 08 16:35:58 CST 2009在該格式中,Sun 代表Sunday(周日),Mar 代表 March(三月),08 代表 8 號,CST 代表China Standard Time(中國標準時間,也就是:使用 Date 類代表指定的時間Date d1 = new Date(2009-1900,3-1,9);時間(東八區)。System.out.prln(d1);使用帶參數的構造方

6、法,可以構造指定日期的Date 類對象,Date 類中年份的參數應該是實際需要代表的年份減去 1900,實際需要代表的月份減去 1 以后的值。例如上面的示例代碼代表就是 2009 年 3象,和這個類似。:獲得 Date 對象中的信息Date d2 = new Date();/年份year = d2.getYear() + 1900;/月份month = d2.getMonth() + 1;/日期date = d2.getDate();/小時hour = d2.getHours();/分鐘minute = d2.getMinutes();/秒second = d2.getSeconds();/幾

7、day = d2.getDay();月 9號。實際代表具體的年月日時分秒的日期對System.out.pr System.out.pr System.out.pr System.out.pr System.out.pr System.out.prSystem.out.prln(年份: + year);ln(月份: + month);ln(日期: + date);ln(小時: + hour); ln(分鐘: + minute); ln(秒: + second);ln(: + day);使用 Date 類中對應的 get 方法,可以獲得 Date類對象中相關的信息,需要注意的是使用getYear

8、獲得是Date 對象中年份減去 1900 以后的值,所以需要顯示對應的年份則需要在返回值的基礎上加上 1900,月份類似。在 Date 類中還提供了 getDay 方法,用于獲得 Date對象代表的時間是幾,Date 類規定周日是 0,周一是 1,周二是 2,后續的依次類推。:Date 對象和相對時間之間的互轉Date d3 = new Date(2009-1900,3-1,10); long time = 1290876532190L;/將 Date 類的對象轉換為相對時間long t = d3.getTime();System.out.prln(t);/將相對時間轉換為 Date 類的對象

9、 Date d4 = new Date(time); System.out.prln(d4);使用 Date 對象中的 getTime 方法,可以將 Date 類的對象轉換為相對時間,使用 Date 類的構造方法,可以將相對時間轉換為 Date 類的對象。經過轉換以后,既方便了時間的計算,也使時間顯示比較直觀了。Calendar 類從 JDK1.1 版本開始,在處理日期和時間時,系統使用 Calendar 類進行實現。在設計上,Calendar 類的功能要比Date 類強大很多,而且在實現方式上也比 Date 類要復雜一些,下面就介紹一下 Calendar 類的使用。Calendar 類是一個

10、抽象類,在實際使用時實現特定的子類的對象,創建對象的過程對程序員來說是透明的,只需要使用 getInstance 方法創建即可。:使用 Calendar 類代表當前時間Calendar c = Calendar.getInstance();由于 Calendar 類是抽象類,且 Calendar 類的構造方法是 protected 的,所以無法使用Calendar 類的構造方法來創建對象,API 中提供了 getInstance 方法用來創建對象。使用該方法獲得的 Calendar 對象就代表當前的系統時間,由于 Calendar 類toString 實現的沒有 Date 類那么直觀,所以直接

11、輸出 Calendar 類的對象意義不大。:使用 Calendar 類代表指定的時間 Calendar c1 = Calendar.getInstance(); c1.set(2009, 3 - 1, 9);使用 Calendar 類代表特定的時間,需要首先創建一個 Calendar 的對象,然后再設定該對象中的年月日參數來完成。set 方法的為:public final void set(year,month,date)以上示例代碼設置的時間為 2009 年 3 月 9 日,其參數的結構和 Date 類不一樣。 Calendar 類中年份的數值直接書寫,月份的值為實際的月份值減 1,日期的值

12、就是實際的日期值。如果只設定某個字段,例如日期的值,則可以使用如下 set 方法:public void set(field,value)在該方法中,參數 field 代表要設置的字段的類型,常見類型如下:Calendar.YEAR年份 Calendar.MONTH月份 Calendar.DATE日期Calendar.DAY_OF_MONTH日期,和上面的字段完全相同 Calendar.HOUR12 小時制的小時數 Calendar.HOUR_OF_DAY24 小時制的小時數 Calendar.MINUTE分鐘Calendar.SECOND秒 Calendar.DAY_OF_K幾后續的參數va

13、lue 代表,設置成的值。例如:c1.set(Calendar.DATE,10);該代碼的作用是將c1 對象代表的時間期設置為 10號,其它所有的數值會被重新計算,例如幾以及對應的相對時間數值等。:獲得 Calendar 類中的信息Calendar c2 = Calendar.getInstance();/年份year = c2.get(Calendar.YEAR);/月份month = c2.get(Calendar.MONTH) + 1;/日期date = c2.get(Calendar.DATE);/小時hour = c2.get(Calendar.HOUR_OF_DAY);/分鐘min

14、ute = c2.get(Calendar.MINUTE);/秒second = c2.get(Calendar.SECOND);/幾day = c2.get(Calendar.DAY_OF_K);System.out.pr System.out.pr System.out.pr System.out.pr System.out.pr System.out.prSystem.out.prln(年份: + year);ln(月份: + month);ln(日期: + date);ln(小時: + hour); ln(分鐘: + minute); ln(秒: + second);ln(: + da

15、y);使用 Calendar 類中的 get 方法可以獲得 Calendar 對象中對應的信息,get 方法的下:如publicget(field)其中參數 field 代表需要獲得的字段的值,字段說明和上面的 set 方法保持一致。需明的是,獲得的月份為實際的月份值減 1,獲得的 Calendar 類中,周日是 1,周一是 2,周二是 3,依次類推。:其它方法說明的值和 Date 類不一樣。在其實 Calendar 類中還提供了很多其它有用的方法,下面簡單的介紹幾個常見方法的使用。:add 方法public abstract void add(field,amount)該方法的作用是在 Ca

16、lendar 對象中的某個字段上增加或減少一定的數值,增加是 amount的值為正,減少時 amount 的值為負。例如在計算一下當前時間 100 天以后的日期,代碼如下: Calendar c3 = Calendar.getInstance(); c3.add(Calendar.DATE, 100);year1 = c3.get(Calendar.YEAR);/月份month1 = c3.get(Calendar.MONTH) + 1;/日期date1 = c3.get(Calendar.DATE);System.out.prln(year1 + 年 + month1 + 月 +date1

17、+ 日);這里 add 方法是指在 c3 對象的 Calendar.DATE,也就是日期字段上增加 100,類會重新計算該日期對象中其它各字段的值,從而獲得 100 天以后的日期,例如程序的輸出結果可能為:2009 年 6 月 17 日:after 方法publicafter(Object when)該方法的作用是判斷當前日期對象是否在 when 對象的后面,如果在 when 對象的后面則返回 true,否則返回 false。例如:Calendar c4 = Calendar.getInstance(); c4.set(2009, 10 - 1, 10);Calendar c5 = Calen

18、dar.getInstance(); c5.set(2010, 10 - 1, 10);b = c5.after(c4);System.out.prln(b);在該示例代碼中對象 c4 代表的時間是 2009 年 10 月 10 號,對象 c5 代表的時間是 2010年 10 月 10 號,則對象 c5 代表的日期在 c4 代表的日期之后,所以 after 方法的返回值是 true。另外一個類似的方法是 before,該方法是判斷當前日期對象是否位于另外一個日期對象之前。:getTime 方法public final Date getTime()該方法的作用是將 Calendar 類型的對象轉

19、換為對應的 Date 類對象,兩者代表相同的時間點。類似的方法是 setTime,該方法的作用是將Date 對象轉換為對應的 Calendar 對象,該方法的如下:public final void setTime(Date date)轉換的示例代碼如下:Date d = new Date();Calendar c6 = Calendar.getInstance();/Calendar 類型的對象轉換為Date 對象Date d1 = c6.getTime();/Date 類型的對象轉換為 Calendar 對象 Calendar c7 = Calendar.getInstance(); c7

20、.setTime(d);:Calendar 對象和相對時間之間的互轉 Calendar c8 = Calendar.getInstance(); long t = 1252785271098L;/將 Calendar 對象轉換為相對時間long t1 = c8.getTimeillis();/將相對時間轉換為 Calendar 對象Calendar c9 = Calendar.getInstance();c9.setTimeillis(t1);在轉換時,使用 Calendar 類中的 getTimeillis 方法可以將 Calendar 對象轉換為相對時間。在將相對時間轉換為 Calenda

21、r 對象時,首先創建一個 Calendar 對象,然后再使用Calendar 類的setTime應用示例illis 方法設置時間即可。下面以兩個簡單的示例介紹時間和日期處理的基本使用。:計算兩個日期之間相差的天數例如計算 2010 年 4 月 1 號和 2009 年 3 月 11 號之間相差的天數,則可以使用時間和日期處理進行計算。該程序實現的原理為:首先代表兩個特定的時間點,這里使用 Calendar 的對象進行代表,然后將兩個時間點轉換為對應的相對時間,求兩個時間點相對時間的差值,然后除以 1的毫秒數(24 小時X60 分鐘 X60 秒X1000 毫秒)即可獲得對應的天數。實現該示例的完整

22、代碼如下:import java.util.*;/* 計算兩個日期之間相差的天數*/天public class DateExle1 public sic void main(String args) /設置兩個日期/日期:2009 年 3 月 11 號Calendar c1 = Calendar.getInstance(); c1.set(2009, 3 - 1, 11);/日期:2010 年 4 月 1 號Calendar c2 = Calendar.getInstance(); c2.set(2010, 4 - 1, 1);/轉換為相對時間long t1 = c1.getTime long

23、 t2 = c2.getTime/計算天數illis();illis();long days = (t2 - t1)/(24 * 60 * 60 * 1000);System.out.prln(days);:輸出當前月的月歷該示例的功能是輸出當前系統時間所在月的日歷,例如當前系統時間是 2009日,則輸出 2009 年 3 月的日歷。年 3 月 10該程序實現的原理為:首先獲得該月 1 號是幾,然后獲得該月的天數,最后使用流程控制實現按照日歷的格式進行輸出即可。即如果 1 號是一,則打印一個的空格,如果 1 號是換行。實現該示例的完整代碼如下:二,則打印兩個的空格,依次類推。打印完六的日期以后

24、,進行import java.util.*;/* 輸出當前月的日歷*/public class DateExle2public sic void main(String args)/獲得當前時間Calendar c = Calendar.getInstance();/設置代表的日期為 1 號c.set(Calendar.DATE,1);/獲得 1 號是幾start = c.get(Calendar.DAY_OF_K);/獲得當前月的最大日期數maxDay = c.getActualum(Calendar.DATE);/輸出標題System.out.prln(日一二三四五六);/輸出開始的空格f

25、or(i = 1;i start;i+) System.out.pr( );/輸出該月中的所有日期for(i = 1;i = maxDay;i+)/輸出日期數字 System.out.pr( + i);/輸出分隔空格 System.out.pr( ); if(i 10)System.out.pr( );/判斷是否換行if(start + i - 1) % 7 = 0) System.out.prln();/換行 System.out.prln();關于時間和日期的處理就介紹這么多,的實現方法還需要根據具體問題進行對應的實現。Random 類在實際的項目開發過程中,經常需要產生一些隨機數值,例如

26、登錄中的校驗數字等,或者需要以一定的幾率實現某種效果,例如程序中的物品掉落等。在Java API 中,在 java.util 包中專門提供了一個和隨機處理有關的類,這個類就是 Random類。隨機數字的生成相關的方法都包含在該類的。Random 類中實現的隨機算法是偽隨機,也就是有規則的隨機。在進行隨機時,隨機算法的 數字稱為 數(seed),在字。相同 數的 Random 對象,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的 Random 對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。這點在生成多個隨機數字時需要特別注意。下面介紹一下 Random 類的

27、使用,以及如何生成指定區間的隨機數組以及實現程序中要求的幾率。:Random 對象的生成Random 類包含兩個構造方法,下面依次進行介紹:a、public Random()數的基礎上進行一定的變換,從而產生需要的隨機數該構造方法使用一個和當前系統時間對應的相對時間有關的數字作為數構造 Random 對象。b、public Random(long seed)該構造方法可以通過制定一個數進行創建。示例代碼:Random r = new Random();Random r1 = new Random(10);數,然后使用這個再次強調:數只是隨機算法的:andom 類中的常用方法數字,和生成的隨機數

28、字的區間無關。Random 類中的方法比較簡單,每個方法的功能也很容易理解。需明的是,Random 類中各方法生成的隨機數字都是均勻分布的,也就是說區間率是均等的。下面對這些方法做一下基本的介紹:的數字生成的幾a、publicnext()值,生成 true 和 false 的值幾率相等,也就是都該方法的作用是生成一個隨機的是 50%的幾率。b、public double nextDouble()該方法的作用是生成一個隨機的 double 值,數值介于0,1.0)之間,這里中括號代表包含區間端點,小括號代表不包含區間端點,也就是 0 到 1 之間的隨機小數,包含 0 而不包含1.0。c、publ

29、icnext()值,該值介于的區間,也就是-231 到 231-1 之間。該方法的作用是生成一個隨機的如果需要生成指定區間的例中的代碼。值,則需要進行一定的數學變換,具體可以參看下面的使用示d、publicnext(n)該方法的作用是生成一個隨機的值,該值介于0,n)的區間,也就是 0 到n 之間的隨機值,包含 0 而不包含 n。如果想生成指定區間的中的代碼。值,也需要進行一定的數學變換,具體可以參看下面的使用示例e、public void setSeed(long seed)該方法的作用是重新設置 Random 對象中的數。設置完數以后的 Random 對象和相同數使用 new 關鍵字創建出

30、的 Random 對象相同。:Random 類使用示例使用 Random 類,一般是生成指定區間的隨機數字,下面就一一介紹如何生成對應區間的隨機數字。以下生成隨機數的代碼均使用以下 Random 對象 r 進行生成:Random r = new Random(); a、成0,1.0)區間的小數 double d1 = r.nextDouble();直接使用nextDouble 方法獲得。b、生成0,5.0)區間的小數double d2 = r.nextDouble() * 5;因為 nextDouble 方法生成的數字區間是0,1.0),將該區間擴大 5 倍即是要求的區間。 同理,生成0,d)

31、區間的隨機小數,d 為任意正的小數,則只需要將nextDouble 方法的返回值乘以 d 即可。c、生成1,2.5)區間的小數double d3 = r.nextDouble() * 1.5 + 1;生成1,2.5)區間的隨機小數,則只需要首先生成0,1.5)區間的隨機數字,然后將生成的隨機數區間加 1 即可。同理,生成任意非從 0 開始的小數區間d1,d2)范圍的隨機數字(其中 d1 不等于 0),則只需要首先生成0,d2-d1)區間的隨機數字,然后將生成的隨機數字區間加上 d1 即可。d、生成任意整數n1 = r.next直接使用next();方法即可。e、生成0,10)區間的整數n2 =

32、 r.next(10);n2 = Mabs(r.next() %10);以上兩行代碼均可生成0,10)區間的整數。第一種實現使用 Random 類中的 next(n)方法直接實現。第二種實現中,首先調用next()方法生成一個任意的數字,該數字和 10 取余以后生成的數字區間為(-10,10),因為按照數學上的規定余數的絕對值小于除數,然后再對該區間求絕對值,則得到的區間就是0,10)了。同理,生成任意0,n)區間的隨機整數,都可以使用如下代碼:n2 = r.next(n);n2 = Mabs(r.next() % n);f、生成0,10區間的整數n3 = r.next(11);n3 = Mabs(r.next() %11);相對于整數區間,0,10區間和0,11)區間等價,所以即生成0,11)區間的整數。g、生成-3,15)區間的整數n4 = r.next(18) - 3;n4 = Mabs(r.next() %18) - 3;生成非從 0 開始區間的隨機整數,可以參看上面非從 0 開始的小數區間實現原理的說明。h、幾率實現按照一定的幾率實現程序邏輯

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論