變數與運算子

38
變變變變變變

description

變數與運算子. 內 容 大 綱. 變數 型別 運算子 字串 變數應用實例. 變數 (1/3). 變數 (variable) 是程式語言中用以儲存資料的地方。 在 Java 語言中,在使用變數之前,我們首先必須先針對將要使用的變數加以 宣告 (declare) ,以使得 Java 編譯器可以保留適當的記憶體空間以存放資料。 變數的宣告包括給變數一個 識別名稱 (identification) ,並描述它存放資料的 型別 (type) 。 Example: 型別 變數識別名稱 ;. 變數 (2/3). 識別名稱的命名規則,在此,我們再將此規則整理如下: - PowerPoint PPT Presentation

Transcript of 變數與運算子

Page 1: 變數與運算子

變數與運算子

Page 2: 變數與運算子

內 容 大 綱 變數 型別 運算子 字串 變數應用實例

Page 3: 變數與運算子

變數 (1/3) 變數 (variable) 是程式語言中用以儲存資料的地方。 在 Java 語言中,在使用變數之前,我們首先必須先

針對將要使用的變數加以宣告 (declare) ,以使得 Java 編譯器可以保留適當的記憶體空間以存放資料。

變數的宣告包括給變數一個識別名稱 (identification) ,並描述它存放資料的型別 (type) 。

Example: 型別 變數識別名稱 ;

Page 4: 變數與運算子

變數 (2/3) 識別名稱的命名規則,在此,我們再將此規則整理

如下: 識別名稱是由一連串英文字母、數字、底線 _ 及錢

幣符號 $ 所組成的。 識別名稱不可由數字開頭。 識別名稱不可包含空白字元。 識別名稱可以使用任何語言之字元,包括中文字元。 保留字 (reserved word) 不可以作為識別名稱。

Page 5: 變數與運算子

變數 (3/3) 變數識別名稱用來指出變數的名稱,而型別則是用以

指出變數儲存資料的方式, Java 語言有八種型別。

Page 6: 變數與運算子

型別 (1/6) Java 語言一共有八種資料型別 (type) byte 、 short 、 cha

r 、 int 、 long 、 float 、 double 、 boolean ,分別可以用以儲存及表示位元組整數、短整數、整數、長整數、浮點數、倍精準度浮點數、布林邏輯值、字元等

表3-1 一個變數在宣告時,必須指明是使用八種資料型別中的哪一種

來存放資料的 Example: int 變數 1; // 宣告用於儲存整數型別資料的 " 變數 1" float 變數 2; // 宣告用於儲存浮點數型別資料的 " 變數 2" char 變數 3; // 宣告用於儲存字元型別資料的 " 變數 3"

Page 7: 變數與運算子

型別 (2/6) 有些 Java 語言的變數是用以儲存類別 (class) 資料的,它們

又稱為樣例變數 (instance variable) 或是物件 (object) ,此種變數的用法比一般型別變數的用法更為複雜

表 3-1 說明,首先我們看到儲存方式欄位,我們發現 byte ,short , int 及 long 型別都是使用 2 的補數 (2’s complement) 表示法儲存資料

float 及 double 則利用 IEEE 754 之浮點數表示法儲存資料 另外,每一個宣告之後都必須設定其初始值 (initial value) 才

可以使用,否則會出現以下之錯誤訊息: Example: Variable 變數 may not have been initialized.

Page 8: 變數與運算子

型別 (3/6) 在 Java 語言中使用幾個特別的字母加在數字之後以代表不同

的型別 Example :在數字之後加上字母 l 或 L 代表 long 型別的數字,

在數字之後加上字母 f 或 F 代表 float 型別的數字,而在數字之後加上字母 d 或 D 代表 double 型別的數字。

Java 語言還要設立一個數值後面加 L 、 l 、 D 、 d 、 F 與 f的用法呢 ? 以下的範例可以說明其原因:

  9223372036854775807L 是正確的數值,而  9223372036854775807 是不正確的數值

Page 9: 變數與運算子

型別 ( 4 /6) 第二個數值因為最後沒有加上 L ,因此被當作 int 型別,但是

int 型別所能表示的最大範圍最大值僅為 2147483647 而已,第二個數值超過 int 型別所能儲存的數值範圍,因此是不正確的數值

float 型別及 double 型別上, 0.0f 與 0.0d 雖然值都是 0 ,但是前者是用 32bit 浮點數表示的 0 ,而後者是用 64bit 浮點數表示的 0

在 Java 語言中,除了在數字之後加上英文字母以區別其儲存型別之外,也可以在數字之前加上 0 、 0x 或 0X來表示不同的數字基底的寫法

Page 10: 變數與運算子

型別 (5/6) Example- 分別為八進位、十六進位及十進位: 八進位:若一個數值的開頭為 0(零 ) ,則此數值是一個八進

位數值,例如 :0246 表示八進位數值 246(oct) 十六進位:若一個數值的開頭為 0x 或 0X,則此數值是一個十六進位數值,例如 :0xABCD 表示十六進位數值 ABCD(hex)

十進位:若一個數值不以 0 、 0x 或 0X開頭,則此數值是一個十進位數值,例如 :123456 代表十進位數值 123456(dec)

char 型別採用 16 位元 Unicode 編碼法來表示字元

Page 11: 變數與運算子

型別 (5/6) 字元的用法必須使用配對的單引號 ( ' ) 來表示,例如 : 'A' 代表字元 A, ‘+’ 代表字元 +, ‘文’ 代表字元 文。 另外,有些字元無法由鍵盤上直接輸入,這些字元必須靠跳脫

(escape) 符號 (\) 來表示,用跳脫 (escape) 符號 (\) 表示的字元請見表3-2。

以下我們介紹幾個變數宣告的實例 int 變數 1; // 宣告屬於整數型別之變數 1 int 變數 2=123; // 宣告屬於整數型別之變數 2 ,並設定其初始值為 123

Page 12: 變數與運算子

型別 (6/6) 在 Java 語言中,等號 (=) 可以用以設定變數的初始值。 我們也可以利用逗號 (,) 將許多變數在同一個敘述中一起宣告,

其中並且可以同時進行初始值設定。如以下的例子: int 變數 1,變數 2=123,變數 3,變數 4; // 宣告屬於整數型別

之變數 1 、變數 2 、變數 3 及變數 4 // 並同時設定變數 2 的初始值為 123

Page 13: 變數與運算子

運算子 (1/4) Java 語言有四十餘種運算子,在本章中,我們僅先介紹

表3-3中與算術運算相關的一些運算子,其餘的運算子則留在後面的章節中再說明。

在表 3-3 中,我們分五組列出 Java 語言算術運算子,我們這樣做的原因是為了配合各運算子的運算優先順序 (precedence) ,先列出的運算子其運算優先順序較高,而列在同一組的運算子則有相同的優先順序。

例如,運算式 1+2*3 優先次序相同的運算則由左而右計算,這稱為運算的左結合

的 (left associative) ,有些優先次序相同的運算則由右而左計算,這稱為運算的右結合的 (right associative) 。

Page 14: 變數與運算子

運算子 (2/4) 例如,我們較為熟悉的加、減、乘、除及模數 (求餘數 ) 運算就都是左結合的。

Example: 運算式 1+2*3%4 結果 : 最終結果 3 刮號可以改變運算的優先順序,也就是說,不管運算子優先順序為何,刮號中的運算式子一定會優先計算的。

運算子 +-*/% , 分別代表加法,減法,乘法,除法及模式(求餘數 ) 運算,這些運算可以運用於整數及浮點數上,唯一的不同是整數的運算結果是整數,而浮點數的運算結果是浮點數。

Page 15: 變數與運算子

運算子 (3/4) 計算運算式時, Java 語言會自動進行型別轉換。 運算式中有浮點數及整數夾雜其中,則整數會自動轉換 (cast)

為浮點數之後才執行計算,且計算結果為浮點數。 運算式中還有倍精準度浮點數,則所有數字更會被轉換為倍精

準度浮點數之後才執行計算,且計算結果為倍精準度。 Example: 運算式 50 / 4 的值為整數 12

運算式 50.0 / 4.0 及 50.0/4 及 50/4.0 的值均為倍精準度浮點數 12.5

Page 16: 變數與運算子

運算子 (4/4) 若運算式中僅有整數類的型別 (即 byte 、 char 、 short 及 in

t 型別 ) ,則所有數字會被轉換為整數之後才執行計算,且計算結果為整數型別。

Java 語言自動執行型別轉換之外,我們也可以使用型別轉換運算子 (請參考表3-3)執行強迫型別轉換

Example: 運算式 (int)50.3 及 (int)50.01234567 及 (int)50.98765 的值均為屬於整數型別的 50 。

例子

Page 17: 變數與運算子

字串 (1/3) 我們要介紹一個用來處理字串的特別類別 String ,注意St

ring 的第一個字是大寫的,這表示它是一個類別,而不是型別。

String 是 Java 語言中非常特別的類別,它的用法有一點類似型別,例如, String類別可以用等號 (=) 來設定初始值,並且可以使用加號 (+) 來執行連結 (concatenate) 運算等

一個字串是一個使用配對雙引號包圍起來的一連串的字元,例如,我們在第一章中看到的 "歡迎來到 Java世界 "

一個屬於 String類別的變數可以使用等號 (=) 來設定初始值,例如: String 字串 1="歡迎來到 Java世界 ";

Page 18: 變數與運算子

字串 (2/3) String類別的變數亦可以使用加號 (+) 來執行連結 (concaten

ation) 運算,例如 : String 字串 1="歡迎來到 "; String 字串 2="Java世界 "; String 字串 3=字串 1+字串 2; 字串在執行連結運算時會自動將非字串類別的項目轉換為字串類別之後再執行連結運算,例如 :

int 整數 =2001;

String 字串 ="今年是公元 "+整數 +"年 ";

Page 19: 變數與運算子

字串 (2/3) 字串既然是一連串的字元所組成的,因此所有字元都可以出現

在字串中,例如 : String 字串 =“今年是 \t公元 \n\t2001年 \n\t!!!!”; 變數字

串的初始值中即含 \t 及 \n兩個特別字元 若是使用 System.out.print( 字串 ); 會在命令視窗中出現以下

的結果: 今年是 公元

2001年 !!!!

Page 20: 變數與運算子

字串 (3/3) 因為 \t 代表定位字元,會將列印的位置移動到後方定位點上,在 Ja

va 語言中定位點是位於 8 的倍數的位置。另外, \n 代表換行字元,此字元會使字串換行列印

System.out.println這個方法 (注意,此方法比 System.out.print方法在末尾多了兩個字元 ln , ln 是 line 的縮寫 ) 在印完括號中的字串參數之後,會將列印位置移到新的一行 ( 下一行 ) ,因此,若緊接著有列印的動作,則列印會從新的一行開始。

Example: System.out.print("歡迎來到 \nJava\n世界 "); 這個敘述與下列三個敘述同義: System.out.println("歡迎來到 "); System.out.println("Java"); System.out.println("世界 "); 執行結果

Page 21: 變數與運算子

變數應用實例 (1/2) 以下我們以範例程式 3-1 來作為變數的運用實例,此範例程式檔名為計算 .java ,

其程式碼如下所列:

Page 22: 變數與運算子

變數應用實例 (2/2) 執行結果 程式說明 :

Page 23: 變數與運算子

The END

Page 24: 變數與運算子

表 3-1

Page 25: 變數與運算子

表 3-2

Page 26: 變數與運算子

表 3-3

Page 27: 變數與運算子

例子 計算口袋裡紅包的總金額 : 主程式裡宣告一個變數,並將之命名為總額,並將此變數的初始值為設為 0 => int 總額 =0;

拜年之後獲得 1000 元的紅包 => 總額 =總額 +1000; 此行敘述會執行設定動作,因為 + 運算子的執行優先順序比 = 運算子高,此敘述會先計算等號右邊的加式,並將計算結果存入等號左邊的變數中。

上列敘述也可以用敘述 => 總額 +=1000; 總額 =總額 -600; 此敘述執行之後,變數總額的值會減去 600 上列敘述也可以用敘述 => 總額 -=600;

Page 28: 變數與運算子

例子 獲得 3 倍的彩金,總額 =總額 *3; <=> 總額 *=3; 保留原先身上現金總額的四分之一,總額 =總額 /4; 總額 /=4;

總額 =總額%69; 此敘述中總額%69 的意思是求變數總額之值除以 69 的餘數,這個值恰好可以是齊齊買完Kitty玩偶之後身上還剩餘的現金,等號代表要將總額%69 的計算結果存回等號左邊的變數總額中。

用一個敘述來將上述 + - * / %等五個運算一口氣都表示出來,總額 =(總額 +1000-600)*3/4%69;

遞增及遞減運算子 ++及 -- 的用法, ++及 -- 表示將變數的值往上遞增 ( 加一 ) 或往下遞減 (減一 )

Page 29: 變數與運算子

例子 另外, ++與 -- 出現在變數的前面與後面也會有不同的結果,

例如,下列二個敘述的執行結果是不同的: 總額 =整數 ++*4 =>總額 = 整數 *4; 整數 = 整數 +1; 總額 =++整數 *4; =>整數 = 整數 +1; 總額 = 整數 *4;

Page 30: 變數與運算子

執行結果

Page 31: 變數與運算子

執行結果

Page 32: 變數與運算子

程式說明 第 4行 4: import javax.swing.JOptionPane; 為引進 JOptionPane這個類別的敘述, swing類別庫是 awt 類別庫的加強版 (awt 代表 abstract window toolkit) ,自 JDK 1.2 以後即有提供。 swing這個類別庫包括了許多圖形使用者介面 (GUI , Graphical User Interface) 要用到的類別及方法。例如, swing類別庫中的 JOptionPane這個類別提供一些彈出對話方塊 (pop up dialog box) ,可提示使用者輸入資料或顯示一些資訊給使用者看。

第 5行 5: public class 計算 { 為類別計算宣告的開始,其中第 5行與第 24行的大括號配對

代表第 5行至 24行之間為類別定義區塊。

Page 33: 變數與運算子

程式說明 第 6行 6: public static void main(String[] 參數 ){ 代表 main 方法定義的開始,其中第 6行與第 23行的大括號配對代表第 6行與第 23行之間為 main 方法的定義區塊。

第 10行 10: 字串 1=JOptionPane.showInputDialog("輸入第一個整數 ");

呼叫 JOptionPane類別的 showInputDialog 方法,此方法會彈出一個輸入對話方塊 (dialog box) ,如下所示:

Page 34: 變數與運算子

程式說明 使用者在此對話方塊中填入資料之後再接「OK」按鍵,則使

用者填入的資料會以字串的方式隨著 showInputDialog 方法傳回,因此,字串 1 中會存有使用者於輸入對話方塊中鍵入的字串。

第 12行 12: 數 1=Integer.parseInt( 字串 1); 會將字串 1 的字串轉為相對的整數值,並存入變數數 1 。 Int

eger 是一個 Java 內建類別,屬於 java.lang類別庫, java.lang這個類別庫裡有許多 Java 語言基本的類別,這些基本類別會自動引入每一個 Java 程式中,而不必再使用 import敘述引入。 Intger類別對應基本型別 int

注意, Intger類別的第一個字母為大寫,而 int 型別的第一個字母為小寫。

Page 35: 變數與運算子

程式說明 第 14至 18行,則分別使用 +, - , *, / 及%等運算子執行變數數 1 與數 2 的和、差、積、商及餘數的計算,其計算結果並存於和、差、積、商及餘等五個變數。

第 19行 19: String 顯示字串 =數 1+" 與 "+數 2+" 之 \n和為 "+ 和 +"\n差為 "+ 差 +"\n積為 "+積 +"\n商為 "+ 商 +"\n餘為 "+ 餘 ;

是一個變數顯示字串的定義, Java 語言允許你在程式的任何地方進行變數的定義,只要你在使用變數之前定義變數就可以了,不必管這個定義出現在什麼地方。顯示字串的初值是一些字串的連結,其間包括由變數和、差、積、商及餘等轉成的字串及一些包括跳行字元 \n 的字串。

Page 36: 變數與運算子

程式說明 第 20行 20: JOptionPane.showMessageDialog(null, 顯示

字串 ); 呼叫 JoptionPane類別的 showMessageDialog 方法,可以

將剛剛定義的顯示字串變數的內容展現在訊息對話方塊上,如下圖:

Page 37: 變數與運算子

程式說明 第 21行 21: System.out.print(顯示字串 ); 呼叫System.out.print 方法,可以將剛剛定義的顯示字串變

數的內容顯示在命令視窗中,如下圖:

Page 38: 變數與運算子

程式說明 第 22行 22: System.exit(0); 呼叫System類別的 exit 方法以結束程式執行, exit(0) 方法

中的參數 0 代表程式正常結束 ( 一般非 0 之參數代表不正常結束 ) 。所有使用圖形使用者介面 ( 包括輸入對話框、顯示對話框等各種彈出式對話框 ) 的程式都需要加入此行,以確保程式可以正確的結束執行。