資料型態的轉換

資料型態的轉換可分為「自動型態轉換」及「強制型態轉換」。

一、自動型態轉換

  • 轉換前的資料型態與轉換後的型態相容

  • 轉換後的資料型態之表示範圍比轉換前的型態大

  • 型態的轉換只限該行敘述,不影響原先變數的型態定義

  • 保證資料的精確度

  • 這種轉換方式稱為「擴大轉換」

字元與整數可以使用自動型態轉換;整數與浮點數亦相容;

boolean 布林型態只能存放 true 或 false,因此與整數及字元不相容,不能轉換。

package ch03;

public class ch03_4_4 {

	public static void main(String[] args) {
		int a=45;
		float b=2.3f;

		System.out.println("a= "+a+" ,b= "+b);
		System.out.println("a/b= "+(a/b));

	}

}

OUTPUT: a= 45 ,b= 2.3 a/b= 19.565218

當兩個數值中有一個為浮點數時,運算結果會直接轉換為浮點數。

當運算式中變數的型態不同時,會自動把較少的表示範圍轉換成較大的表示範圍後再做運算。

二、強制型態轉換

強制型態轉換是直接撰寫在程式碼中,所以也稱為「顯性轉換」。

資料型態的強制性轉換語法:

(欲轉換的資料型態)變數名稱 ;
package ch03;

public class ch03_4_5 {

	public static void main(String[] args) {
		int a=25;
		int b=9;

		System.out.println("a= "+a+ ",b= "+b);
		System.out.println("a/b= "+a/b);

                // 將a轉換成浮點數之後,再除以b
		System.out.println("(float)a/b= "+(float)a/b);

	}

}

OUTPUT: a= 25,b= 9 a/b= 2 (float)a/b= 2.7777777

除了 (float)a/b 的寫法之外,以下兩種寫法也成立:

(1) a / (float) b //將整數b強制轉換成浮點數,再以整數a除之。

(2) (float) a / (float) b //將整數a,b 同時強制轉換成浮點數後運算。

若是將一個能表示較大範圍之資料型態的變數,設給範圍較小之資料型態的變數時,稱為「縮小轉換」。

在縮小轉換的過程可能會漏失資料的準確性。

三、由鍵盤輸入資料 Scanner

我們先了解撰寫的基本架構:

import java.util.Scanner;
public class class_name   //類別名稱
{
	public static void main(String[] args)
        {
	   	Scanner 物件名稱=new Scnner (System.in); //宣告 Scanner 類別的變數
		資料型態 變數名稱 a;                      //宣告變數
                ... ...
		變數名稱=物件名稱.相對應型態的Scanner 類別函數; //讀入資料至變數
		... ...

	}

}

以下我們實例,並結合先前講到的print與println的差異:

package ch03;

import java.util.Scanner;

public class ch03_5 {

	public static void main(String[] args) {
		Scanner sc=new Scanner (System.in);  //宣告 Scanner 類別的物件名為:sc
		System.out.print("請輸入姓名");
		String str;                          //宣告變數str
                str=sc.nextLine();                   //輸入字串,給str存放
		System.out.println("歡迎 "+str);

	}

}

OUTPUT: 請輸入姓名 4x // 斜線粗體為輸入的字串 歡迎 4x

在使用Scanner 類別時,我們必須先建立Scanner 類別的物件,再利用所建立的物件呼叫相對應的函數。

常用的相對應型態之函數

四、Scanner 小技巧

輸入多項資料時,可以只宣告一個Scanner 類別的物件,再用Scanner 類別提供的成員函數,將鍵盤中輸入的資料指定給不同型態的變數存放,不需要宣告多個Scanner 類別物件。 如以下片段範例:

Ssanner scn=new Scanner(System.in);  //宣告Scanner類別的物件
int i;                               //宣告整數變數
double d;                            //宣告倍精度浮點數
i=scn.nextInt();                     //輸入整數數值,給i存放
d=scn.nextDouble();                  //輸入倍精度浮點數數值,給d存放

五、next()與nextLine()

在輸入字串時,可以使用 next() 或 nextLine() 函數,由於Scanner 物件遇到空白字元即會傳回空白字元之前的資料,因此若是字串中不確定會帶有空白字元的情況下,建議使用 nextLine(),反則輸入的資料將被截斷

package ch03;
import java.util.Scanner;
public class ch03_5_2 {

	public static void main(String[] args) {
		Scanner scn=new Scanner (System.in);  //宣告 Scanner 類別的物件名為:scn
		String name;
		int age;

		System.out.print("請輸入姓名");
		name=scn.nextLine();                   //輸入字串,給name存放

                System.out.print("請輸入年齡");
                age=scn.nextInt();                   //輸入整數,給age存放

		System.out.print("歡迎, "+name+", 您目前 ");
		System.out.println(age+" 歲。");

	}

}

OUTPUT: 請輸入姓名scheng // 斜線粗體為輸入的字串 請輸入年齡19 歡迎, scheng, 您目前 19 歲。

六、charAt()

Scanner類別並沒有提供字元輸入相對應型態的函數,可以利用 next() 取得字串後,再利用 charAt(0) 取出字串中第0個字元即可得到字元。

package ch03;
import java.util.Scanner;
public class ch03_5_3 {

	public static void main(String[] args) {
		Scanner scn=new Scanner (System.in);  //宣告 Scanner 類別的物件名為:scn

		System.out.print("請輸入姓名");
		String str;                          //宣告變數str
                str=scn.nextLine();                  //輸入字串,給str存放

                char ch;
                ch=str.charAt(2);                    //取出字串第2個字元
                System.out.print(ch);                //印出第二個字元

	}

}

OUTPUT: 請輸入姓名scheng // 斜線粗體為輸入的字串 h //第0個字元為 ‘s’ ;第1個字元為 ‘c’ 以此類推。

Last updated