第 15 章 標準類別 1
本章提要 15.1 前言 15.2 基本資料類別介紹 15.3 Integer 類別 15.4 Double 類別 15.5 Float 類別 Long 類別 Short 類別 15.6 數學相關類別 Math 15.7 後記 2
15.1 前言 不同基本資料型別可以互相轉換, 但也只予許由小轉大的情況, 例如 1. byte 轉為 short int long float double 2. short 轉為 int long float double 3. int 轉為 long float double 或利用強制型別轉換, 將資料型別由大轉小, 例如 1. double d = 95.57 2. int v = (int) d 3
15.1 前言 但如果我們要將數值資料轉換成字串, 或是字串資料轉成數值時, 該如何做呢? 如想利用鍵盤輸入一個數值到電腦中, 並計算該數值的開根號答案, 要怎麼做呢? 有什麼方法可以將一個十進制的數值直接以二進制的方式表示出來呢? 基本資料類別 4
15.1 前言 基本資料類別 可以讓我們將資料以 integer double float long 等型別的值做輸出基本資料類別除了提供輸出函式外, 還有那些功能呢? Math 類別提供了許多數學運算的函式到底有那些好用的工具呢? 5
15.2 基本資料類別介紹 當需要將 基本資料型別, 如 int float 等, 轉換成字串 其他基本資料型別, 或轉換成其他物件時, 該怎麼做呢? 我們必需先將 基本資料型別 做包裝的動作, 將它包裝成我們想要的資料格式該怎麼包裝呢? 在 java.lang 套件中提供了包裝基本資料型別的工具, 稱之為 基本資料類別 6
15.2 基本資料類別介紹 基本資料類別, 包括 Short Integer Float Long Double Boolean Byte 7
15.2 基本資料類別介紹 假設需要的格式是 double, 而原本的資料 ivalue 是 int 時, 可以利用 Double 類別將原本的 int 包裝起來, 接著就可以利用 Double 類別提供的函式, 將原本的資料以 double 型式做輸出 ivalue 在包裝完後是 Double 的型別, 但本質上還是 int 的型別 8
15.2 基本資料類別介紹 利用 基本資料類別 來包裝 基本資料型別 包裝後的基本資料型別即成為一個物件, 這個物件就有各式各樣的函式工具可以對裡面的基本資料型別做動作 9
15.2 基本資料類別介紹 項次 1 2 Integer 類別 bytevalue() shortvalue() intvalue() floatvalue() longvalue() doublevalue() Integer 建構元 Integer(int value) 產生一個 Integer 物件, 初始值為 value Integer(String s) 產生一個 Integer 物件, 初始值為字串 s 10
範例程式 1 Integer 類別 9 public static void main(string args[]){ 10 int iv = 987654321; 11 Integer ivalue = new Integer(iv); 12 System.out.println("byte 型別 = " + ivalue.bytevalue()); 13 System.out.println("short 型別 = " + ivalue.shortvalue()); 14 System.out.println("int 型別 = " + ivalue.intvalue()); 15 System.out.println("float 型別 = " + ivalue.floatvalue()); 16 System.out.println("long 型別 = " + ivalue.longvalue()); 17 System.out.println("double 型別 = " + ivalue.doublevalue()); 18 } 11
執行結果 byte 型別 = -79 short 型別 = 26801 int 型別 = 987654321 float 型別 = 9.8765434E8 long 型別 = 987654321 double 型別 = 9.87654321E8 12
範例程式 2 Integer 類別之應用 10 String s = "132"; 11 int is = Integer.parseInt(s); 12 int is5 = Integer.parseInt(s, 5); 13 System.out.println(s+" 轉成 5 進制 :"+is5); 14 int is8 = Integer.parseInt(s, 8); 15 System.out.println(s+" 轉成 8 進制 :"+is8); 17 System.out.println("\n"+s+" 轉成 2 進制字串 : + Integer.toBinaryString(is)); 18 System.out.println(s+" 轉成 6 進制字串 :" + Integer.toString(is, 6)); 19 System.out.println(s+" 轉成 16 進制字串 :" + Integer.toHexString(is)); 13
21 String s2 = "1453"; 22 Integer Is2 = Integer.valueOf(s2); 23 System.out.println("\n"+s2+" 轉成整數物件 :"+Is2); 24 Integer Is29 = Integer.valueOf(s2, 9); 25 System.out.println(s2+" 轉成 9 進制整數物件 : +Is29); 26 System.out.println("\n"+Is2+" 與 1453 比較 = " + Is2.compareTo(new Integer(1453))); 27 System.out.println(Is29+" 與 1453 比較 = " + Is29.compareTo(new Integer(1453))); 14
執行結果 132 轉成 5 進制 :42 132 轉成 8 進制 :90 132 轉成 2 進制字串 :10000100 132 轉成 6 進制字串 :340 132 轉成 16 進制字串 :84 1453 轉成整數物件 :1453 1453 轉成 9 進制整數物件 :1101 1453 與 1453 比較 = 0 1101 與 1453 比較 = -1 15
項次 Double 建構元 15.4 Double 類別 Double 建構元 1 Double(int value) 產生一個 Double 物件, 初始值為 value 2 Double(String s) 產生一個 Double 物件, 初始值為字串 s bytevalue() shortvalue() intvalue() floatvalue() longvalue() doublevalue() 16
15.5 Float 類別 Long 類別 Short 類別 利用 tostring() 函式輸出字串, 及利用 valueof() 輸出相對應的類別物件 基本資料型別與基本資料類別的對應關係為 : byte Byte short Short int Integer float Float long Long double Double 17
15.6 數學相關類別 Math Java 提供了相當多的數學工具, 讓我們不用一一去撰寫這些運算子, 而這些工具就存放在 Java 的數學類別庫 Math 類別中 項次 1 E 自然對數 2 PI 圓周率 Math 變數 18
範例程式 3 Math 類別之應用 13 System.out.println(" 輸入半徑 :"); 14 15 try{ 16 BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in)); 17 String s = bfr.readline(); 18 int r = Integer.parseInt(s); 19 System.out.println(" 圓的周長為 :"+2*r*Math.PI); 21 System.out.println("\n 輸入弳度 :"); 22 double deg = Double.parseDouble(bfr.readLine()); 23 double ang = Math.toRadians(deg); 24 System.out.println(" 弧度表示 :"+ang); 19
25 System.out.println(" 正弦值 :"+Math.sin(ang)); 26 System.out.println(" 餘弦值 :"+Math.cos(ang)); 27 System.out.println(" 正切值 :"+Math.tan(ang)); 29 double v1 = 89.63, v2 = -15.14; 30 System.out.println("\n 大於 "+v1+" 的最小整數 ="+Math.ceil(v1)); 31 System.out.println(" 大於 "+v2+" 的最小整數 ="+Math.ceil(v2)); 32 System.out.println(" 小於 "+v1+" 的最大整數 ="+Math.floor(v1)); 33 System.out.println(" 小於 "+v2+" 的最大整數 ="+Math.floor(v2)); 34 System.out.println(" 最靠近 "+v1+" 的整數為 ="+Math.rint(v1)); 35 System.out.println(" 最靠近 "+v2+" 的 long 為 ="+Math.round(v2)); 36 System.out.println(" 二者最大數為 :"+Math.max(v1, v2)); 20
38 System.out.println("\nlog 以 2 為底的 256 為 = " + Math.log(256)/Math.log(2)); 39 System.out.println("2 的 15 次方為 = "+Math.pow(2, 15)); 執行結果 自然對數為 :2.718281828459045 圓周率為 :3.141592653589793 輸入半徑 :10 圓的周長為 :62.83185307179586 輸入角度 :60 弧度表示 :1.0471975511965976 正弦值 :0.8660254037844386 餘弦值 :0.5000000000000001 正切值 :1.7320508075688767 大於 89.63 的最小整數 =90.0 大於 -15.14 的最小整數 =-15.0 小於 89.63 的最大整數 =89.0 小於 -15.14 的最大整數 =-16.0 最靠近 89.63 的整數為 =90.0 最靠近 -15.14 的 long 為 =-15 二者最大數為 :89.63 log 以 2 為底的 256 為 = 8.0 2 的 15 次方為 = 32768.0 21
範例程式 4 random 函式之應用, 猜拳遊戲 13 BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in)); 14 int c = Integer.parseInt(bfr.readLine()); 15 while (c!= -1){ 16 int computer = (int) (Math.random()*10) % 3; 17 switch (c){ 18 case 0: 19 switch (computer){ 20 case 0: 21 System.out.println(" 電腦出剪刀, 平手 "); 22 break; 23 case 1: 24 System.out.println(" 電腦出石頭, 你輸了 "); 25 break; 26 case 2: 27 System.out.println(" 電腦出布, 你贏了 "); 28 break; 29 } 30 break; 22
執行結果 請輸入你的選擇 (0. 剪刀 1. 石頭 2. 布 -1. 離開 ):2 電腦出布, 平手請輸入你的選擇 (0. 剪刀 1. 石頭 2. 布 -1. 離開 ):0 電腦出石頭, 你輸了請輸入你的選擇 (0. 剪刀 1. 石頭 2. 布 -1. 離開 ):1 電腦出布, 你輸了請輸入你的選擇 (0. 剪刀 1. 石頭 2. 布 -1. 離開 ):3 請輸入你的選擇 (0. 剪刀 1. 石頭 2. 布 -1. 離開 ):0 電腦出剪刀, 平手請輸入你的選擇 (0. 剪刀 1. 石頭 2. 布 -1. 離開 ):-1 遊戲結束! 23
15.7 後記 資料格式轉換的基本資料類別 Integer Double Float Short Byte 數學工具類別 Math 24