Download
slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
變數與運算子 PowerPoint Presentation
Download Presentation
變數與運算子

變數與運算子

137 Vues Download Presentation
Télécharger la présentation

變數與運算子

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. 變數與運算子

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

  3. 變數 (1/3) • 變數(variable)是程式語言中用以儲存資料的地方。 • 在Java語言中,在使用變數之前,我們首先必須先針對將要使用的變數加以宣告(declare),以使得Java編譯器可以保留適當的記憶體空間以存放資料。 • 變數的宣告包括給變數一個識別名稱(identification),並描述它存放資料的型別(type)。 • Example: 型別 變數識別名稱;

  4. 變數 (2/3) • 識別名稱的命名規則,在此,我們再將此規則整理如下: • 識別名稱是由一連串英文字母、數字、底線_及錢幣符號$所組成的。 • 識別名稱不可由數字開頭。 • 識別名稱不可包含空白字元。 • 識別名稱可以使用任何語言之字元,包括中文字元。 • 保留字(reserved word)不可以作為識別名稱。

  5. 變數 (3/3) • 變數識別名稱用來指出變數的名稱,而型別則是用以指出變數儲存資料的方式,Java語言有八種型別。

  6. 型別(1/6) • Java語言一共有八種資料型別(type)  byte、short、char、int、long、float、double、boolean,分別可以用以儲存及表示位元組整數、短整數、整數、長整數、浮點數、倍精準度浮點數、布林邏輯值、字元等 • 表3-1 • 一個變數在宣告時,必須指明是使用八種資料型別中的哪一種來存放資料的 • Example: int 變數1; //宣告用於儲存整數型別資料的"變數1" float 變數2; //宣告用於儲存浮點數型別資料的"變數2" char 變數3; //宣告用於儲存字元型別資料的"變數3"

  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.

  8. 型別(3/6) • 在Java語言中使用幾個特別的字母加在數字之後以代表不同的型別 • Example:在數字之後加上字母l或L代表long型別的數字,在數字之後加上字母f或F代表float型別的數字,而在數字之後加上字母d或D代表double型別的數字。 • Java語言還要設立一個數值後面加L、l、D、d、F與f的用法呢?以下的範例可以說明其原因: 9223372036854775807L  是正確的數值,而 9223372036854775807  是不正確的數值

  9. 型別(4/6) • 第二個數值因為最後沒有加上L,因此被當作int型別,但是int型別所能表示的最大範圍最大值僅為2147483647而已,第二個數值超過int型別所能儲存的數值範圍,因此是不正確的數值 • float型別及double型別上,0.0f與0.0d雖然值都是0,但是前者是用32bit浮點數表示的0,而後者是用64bit浮點數表示的0 • 在Java語言中,除了在數字之後加上英文字母以區別其儲存型別之外,也可以在數字之前加上0、0x或0X來表示不同的數字基底的寫法

  10. 型別(5/6) • Example-分別為八進位、十六進位及十進位: • 八進位:若一個數值的開頭為0(零),則此數值是一個八進位數值,例如:0246表示八進位數值246(oct) • 十六進位:若一個數值的開頭為0x或0X,則此數值是一個十六進位數值,例如:0xABCD表示十六進位數值ABCD(hex) • 十進位:若一個數值不以0、0x或0X開頭,則此數值是一個十進位數值,例如:123456代表十進位數值123456(dec) • char型別採用16位元Unicode編碼法來表示字元

  11. 型別(5/6) • 字元的用法必須使用配對的單引號( ' )來表示,例如: 'A' 代表字元 A, ‘+’ 代表字元 +, ‘文’ 代表字元 文。 • 另外,有些字元無法由鍵盤上直接輸入,這些字元必須靠跳脫(escape)符號(\)來表示,用跳脫(escape)符號(\)表示的字元請見表3-2。 • 以下我們介紹幾個變數宣告的實例 int 變數1; //宣告屬於整數型別之變數1 int 變數2=123; //宣告屬於整數型別之變數2,並設定其初始值為123

  12. 型別(6/6) • 在Java語言中,等號 (=)可以用以設定變數的初始值。 • 我們也可以利用逗號(,)將許多變數在同一個敘述中一起宣告,其中並且可以同時進行初始值設定。如以下的例子: • int 變數1,變數2=123,變數3,變數4; //宣告屬於整數型別之變數1、變數2、變數3及變數4 //並同時設定變數2的初始值為123

  13. 運算子(1/4) • Java語言有四十餘種運算子,在本章中,我們僅先介紹表3-3中與算術運算相關的一些運算子,其餘的運算子則留在後面的章節中再說明。 • 在表3-3中,我們分五組列出Java語言算術運算子,我們這樣做的原因是為了配合各運算子的運算優先順序(precedence),先列出的運算子其運算優先順序較高,而列在同一組的運算子則有相同的優先順序。 • 例如,運算式 1+2*3 • 優先次序相同的運算則由左而右計算,這稱為運算的左結合的(left associative),有些優先次序相同的運算則由右而左計算,這稱為運算的右結合的(right associative)。

  14. 運算子(2/4) • 例如,我們較為熟悉的加、減、乘、除及模數(求餘數)運算就都是左結合的。 • Example:運算式 1+2*3%4 • 結果:最終結果3 • 刮號可以改變運算的優先順序,也就是說,不管運算子優先順序為何,刮號中的運算式子一定會優先計算的。 • 運算子+-*/% , 分別代表加法,減法,乘法,除法及模式(求餘數)運算,這些運算可以運用於整數及浮點數上,唯一的不同是整數的運算結果是整數,而浮點數的運算結果是浮點數。

  15. 運算子(3/4) • 計算運算式時,Java語言會自動進行型別轉換。 • 運算式中有浮點數及整數夾雜其中,則整數會自動轉換(cast)為浮點數之後才執行計算,且計算結果為浮點數。 • 運算式中還有倍精準度浮點數,則所有數字更會被轉換為倍精準度浮點數之後才執行計算,且計算結果為倍精準度。 • Example:運算式50 / 4 的值為整數12 運算式50.0 / 4.0 及 50.0/4 及 50/4.0的值均為倍精準度浮點數 12.5

  16. 運算子(4/4) • 若運算式中僅有整數類的型別(即byte、char、short及int型別),則所有數字會被轉換為整數之後才執行計算,且計算結果為整數型別。 • Java語言自動執行型別轉換之外,我們也可以使用型別轉換運算子(請參考表3-3)執行強迫型別轉換 • Example:運算式 (int)50.3 及 (int)50.01234567 及 (int)50.98765的值均為屬於整數型別的50。 • 例子

  17. 字串(1/3) • 我們要介紹一個用來處理字串的特別類別 String,注意String的第一個字是大寫的,這表示它是一個類別,而不是型別。 • String是Java語言中非常特別的類別,它的用法有一點類似型別,例如,String類別可以用等號(=)來設定初始值,並且可以使用加號(+)來執行連結(concatenate)運算等 • 一個字串是一個使用配對雙引號包圍起來的一連串的字元,例如,我們在第一章中看到的"歡迎來到Java世界" • 一個屬於String類別的變數可以使用等號(=)來設定初始值,例如:String 字串1="歡迎來到Java世界";

  18. 字串(2/3) • String類別的變數亦可以使用加號(+)來執行連結(concatenation)運算,例如: String 字串1="歡迎來到"; String 字串2="Java世界"; String 字串3=字串1+字串2; • 字串在執行連結運算時會自動將非字串類別的項目轉換為字串類別之後再執行連結運算,例如: int 整數=2001; String 字串="今年是公元"+整數+"年";

  19. 字串(2/3) • 字串既然是一連串的字元所組成的,因此所有字元都可以出現在字串中,例如: String 字串=“今年是\t公元\n\t2001年\n\t!!!!”; 變數字串的初始值中即含\t及\n兩個特別字元 • 若是使用System.out.print(字串); 會在命令視窗中出現以下的結果: 今年是 公元2001年 !!!!

  20. 字串(3/3) • 因為\t代表定位字元,會將列印的位置移動到後方定位點上,在Java語言中定位點是位於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("世界"); 執行結果

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

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

  23. The END

  24. 表3-1

  25. 表3-2

  26. 表3-3

  27. 例子 • 計算口袋裡紅包的總金額: • 主程式裡宣告一個變數,並將之命名為總額,並將此變數的初始值為設為0 => int 總額=0; • 拜年之後獲得1000元的紅包 =>總額=總額+1000; • 此行敘述會執行設定動作,因為 + 運算子的執行優先順序比 = 運算子高,此敘述會先計算等號右邊的加式,並將計算結果存入等號左邊的變數中。 • 上列敘述也可以用敘述=>總額+=1000; • 總額=總額-600; 此敘述執行之後,變數總額的值會減去600 • 上列敘述也可以用敘述=>總額-=600;

  28. 例子 • 獲得3倍的彩金,總額=總額*3; <=> 總額*=3; • 保留原先身上現金總額的四分之一,總額=總額/4; 總額/=4; • 總額=總額%69; 此敘述中總額%69的意思是求變數總額之值除以69的餘數,這個值恰好可以是齊齊買完Kitty玩偶之後身上還剩餘的現金,等號代表要將總額%69的計算結果存回等號左邊的變數總額中。 • 用一個敘述來將上述 + - * / %等五個運算一口氣都表示出來,總額=(總額+1000-600)*3/4%69; • 遞增及遞減運算子++及--的用法,++及--表示將變數的值往上遞增(加一)或往下遞減(減一)

  29. 例子 • 另外,++與--出現在變數的前面與後面也會有不同的結果,例如,下列二個敘述的執行結果是不同的: • 總額=整數++*4 =>總額=整數*4; 整數=整數+1; • 總額=++整數*4; =>整數=整數+1; 總額=整數*4;

  30. 執行結果

  31. 執行結果

  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行之間為類別定義區塊。

  33. 程式說明 • 第6行 6: public static void main(String[] 參數){ • 代表main方法定義的開始,其中第6行與第23行的大括號配對代表第6行與第23行之間為main方法的定義區塊。 • 第10行 10: 字串1=JOptionPane.showInputDialog("輸入第一個整數"); • 呼叫JOptionPane類別的showInputDialog方法,此方法會彈出一個輸入對話方塊(dialog box),如下所示:

  34. 程式說明 • 使用者在此對話方塊中填入資料之後再接「OK」按鍵,則使用者填入的資料會以字串的方式隨著showInputDialog方法傳回,因此,字串1中會存有使用者於輸入對話方塊中鍵入的字串。 • 第12行 12: 數1=Integer.parseInt(字串1); • 會將字串1的字串轉為相對的整數值,並存入變數數1。Integer是一個Java內建類別,屬於java.lang類別庫,java.lang這個類別庫裡有許多Java語言基本的類別,這些基本類別會自動引入每一個Java程式中,而不必再使用import敘述引入。Intger類別對應基本型別int • 注意,Intger類別的第一個字母為大寫,而int型別的第一個字母為小寫。

  35. 程式說明 • 第14至18行,則分別使用+,-,*,/及%等運算子執行變數數1與數2的和、差、積、商及餘數的計算,其計算結果並存於和、差、積、商及餘等五個變數。 • 第19行 19: String 顯示字串=數1+"與"+數2+"之\n和為"+和+"\n差為"+差+"\n積為"+積+"\n商為"+商+"\n餘為"+餘; • 是一個變數顯示字串的定義,Java語言允許你在程式的任何地方進行變數的定義,只要你在使用變數之前定義變數就可以了,不必管這個定義出現在什麼地方。顯示字串的初值是一些字串的連結,其間包括由變數和、差、積、商及餘等轉成的字串及一些包括跳行字元\n的字串。

  36. 程式說明 • 第20行 20: JOptionPane.showMessageDialog(null,顯示字串); • 呼叫JoptionPane類別的showMessageDialog方法,可以將剛剛定義的顯示字串變數的內容展現在訊息對話方塊上,如下圖:

  37. 程式說明 • 第21行 21: System.out.print(顯示字串); • 呼叫System.out.print方法,可以將剛剛定義的顯示字串變數的內容顯示在命令視窗中,如下圖:

  38. 程式說明 • 第22行 22: System.exit(0); • 呼叫System類別的exit方法以結束程式執行,exit(0)方法中的參數0代表程式正常結束(一般非0之參數代表不正常結束)。所有使用圖形使用者介面(包括輸入對話框、顯示對話框等各種彈出式對話框)的程式都需要加入此行,以確保程式可以正確的結束執行。