資料型態的轉換

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

一、自動型態轉換

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

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

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

  • 保證資料的精確度

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

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

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 類別的物件,再利用所建立的物件呼叫相對應的函數。

常用的相對應型態之函數

資料型態

相對應的函數

資料型態

相對應的函數

byte

nextByte()

float

nextFloat()

short

nextShort()

double

nextDouble()

int

nextInt()

String

next()

long

nextLong()

nextLine()

四、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