JAVA程式語言入門(I) 授課教師:王大瑾

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
JAVA 程式設計 資訊管理系 - 網路組.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
第二章 JAVA语言基础.
第三章 控制结构.
Chapter 5 迴圈.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
.NET 程式設計入門(使用 C#) 講師:鄧智鴻.
常用工具类.
2-3 基本數位邏輯處理※.
第四章 流程控制(一) if,if-else 與 switch
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
JAVA程序设计 第5章 深入理解JAVA语言----补充.
Java程式概觀.
程式設計實作.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
JAVA 程式設計 資訊管理系 - 網路組.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Java 程式設計 講師:FrankLin.
FPGA計算浮點數的方法 姓名:蔡秉旂.
邏輯關係運算 == 等於 & 且 (logical and) ~= 不等於 | 或 (logical or) < 小於
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Ch02-基礎語法.
程式設計 博碩文化出版發行.
第一單元 建立java 程式.
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第二章Java基本程序设计.
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
Java變數 2014/6/24.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
CH05. 選擇敘述.
挑戰C++程式語言 ──第8章 進一步談字元與字串
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.
第二章 类型、对象、运算符和表达式.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
Review 1~3.
Ch18. 位元運算子與運算子函式.
第二章 Java基本语法 讲师:复凡.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
例題 1. 多項式的排列 1-2 多項式及其加減法 將多項式 按下列方式排列: (1) 降冪排列:______________________ (2) 升冪排列:______________________ 排列 降冪:次數由高至低 升冪;次數由低至高.
1-1 二元一次式運算.
第二章 Java基本语法 讲师:复凡.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
查表法&電腦IO Port二進制轉七段顯示器
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
適用於多選一 可減少if 與 else配對混淆的錯誤.
計算機程式設計 老師:謝孟諺 助教:楊斯竣.
第五章 運算關係式(Expression).
變數、資料型態、運算子.
第2章 Java语言基础.
變數、常數與資料型態 大綱 變數與常數 變數 資料型別 資料的輸出.
判斷(選擇性敘述) if if else else if 條件運算子.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
第二章 Java基础语法 北京传智播客教育
第二章 Java基本语法 讲师:复凡.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

JAVA程式語言入門(I) 授課教師:王大瑾 Ch04 運算子 JAVA程式語言入門(I) 授課教師:王大瑾

運算式 運算子:程式中用以運算的符號 運算元:被運算的常數或變數 運算式:運算子和運算元組成用以運算的式子 常見的運算式: a+1 7+8 5+9*3-b x=6

運算式 運算式的結果也是一個值,所以運算式可以視為另一個運算式的運算元

敘述 運算式後面加一個分號(;),運算式可以被提升變成一個敘述(statemant) 不是每個運算式都可以加上分號而變成敘述 常見的合法敘述: c = c+1; c+1; //錯誤 int n; //宣告變數 return 12; //方法中回傳數值 n=12*a; //將運算結果存至變數內 System.out.println(n); //呼叫方法

指定運算子 指定運算子的用法: 設定常數值給變數 將變數的內容指定給另一個變數 將運算式的結果指定給變數 a = 9; a = b;

指定運算子 「=」的左邊一定是變數,不能是數值。 結合性是由右至左。 多重指定的例子: a = b = c = d = 5; D = 5 C = d  c=5 B = c  b = 5 A = b  a = 5

算術運算子 算術運算子的結合性是由左至右 優先序為:先(*/%)後(+-) 注意「運算時,型別的自動轉換」 運算子 語法 說明 + a=5, b=2的 運算結果 + a + b a加b 7 - a – b a減b 3 * a * b a乘b 10 / a / b a除以b 2.5 % a % b a除以b的餘數 1

練習一 預測下列程式碼的輸出結果, 修正程式碼以得到正確值 public class Ex03_01 { public static void main (String arg []) float c = 5 / 2; System.out.println("int / int : c = "+c); } 本程式結果會變成2.0, 而不是2.5; 程式於程式區\java(1)\Ch03\Ex03_01.java

練習二 試寫一個程式:將一個十進制57轉換為二進制111001 (提示一:可以不需要用判斷敘述及迴圈,用較原始的方式處理,即某些敘述重覆六次) (提示二:利用除及餘數) 程式於程式區\java(1)\Ch03\Ex03_02.java

遞增、遞減運算子 不指定給其它變數,則兩種方式是相同的 若指定給另一個變數時,兩種方式的意義不同 a++ ++a a=a+1 → a++ b=b-1 → b-- 不指定給其它變數,則兩種方式是相同的 a++ ++a 若指定給另一個變數時,兩種方式的意義不同 c = ++a; // 先將a加一後,再將a的內容指定給c c = a++; // 先將a的內容指定給c,a再加一 b = a++ + 5 可視為: b = a + 5; a++

算術指定運算子 各種算術指定運算子 算術指定運算子為二元運算子 結合性是由右至左 a=a+2 → a+=2 a=a+3 → a+=3 一般算術式 簡化後的運算式 += a = a + b a += b -= a = a – b a -= b *= a = a * b a *= b /= a = a / b a /= b %= a = a % b a %= b

關係運算子 布林值之間的關係運算只能使用 ==和 != 兩個運算子,其餘的關係運算子都不能使用 關係運算子 說明 範例 範例結果 > 是否大於 5 > 2 true >= 是否大於等於 5 >= 2 < 是否小於 5 < 2 false <= 是否小於等於 5 <= 2 == 是否等於 5 == 2 != 是否不等於 5 != 2

關係運算子 關係運算子的運算優先順序較算術運算子低 運算優先序:先(><>=<=)後(==!=) 關係運算子結合性皆為由左至右 布林值之間的關係運算只能使用==和 !=兩個運算子,其餘的關係運算子都不能使用

範例1:Ch03_01.java System.out.println( 3 > 7 == 1 >= 8 ); System.out.println( true == false ); boolean a=false; boolean b=false; System.out.println( a == b == false ); float f = 2E17F; System.out.println( f == 2E17 ); //精確度問題 System.out.println(2E17f); System.out.println(2E17); 程式於程式區\java(1)\Ch03\Ch03_01.java: A==b==false : 是由左向右,所以先做a==b,再做(a == b) == false 的結果) 答案為: True Flase False

練習三 執行下列程式碼,並探究為何有如此的輸出結果: public class Ex03_03 { public static void main(String arg []) boolean a = true, b = false; System.out.println(b == a); System.out.println(b = a); } 程式於程式區\Java(1)\Ch03\Ex03_03.java

練習四 攝氏溫度(C)轉換為華氏溫度(F)的公式為F=9/5*C+32 請撰寫一程式,可以將攝氏溫度0,54,和98度輸出為華氏溫度 程式於程式區\java(1)\Ch03\Ex03_04.java

條件運算子 ?: 是唯一的三元運算子,其語法如下: 常用的方式: 真時選擇值和假時選擇值的型別應該相同,或是兩者都可以自動型別轉換指定給變數。 判斷值 ? 真時選擇值 : 假時選擇值 變數 = 判斷值 ? 真時選擇值 : 假時選擇值; ifPass = score>=60 ? ’Y’ : ’N’;

範例2:Ch03_02.java class Ch03_02 { public static void main(String [] args) { char level = 85; //設定某科成績, 分數為何不用int資料型態 System.out.println( level>=60 ? "過了,恭喜!" : "沒過,要加油囉!" ); level = level<60 ? '丁' : level; level = level<70 ? '丙' : level; level = level<80 ? '乙' : level; level = level<90 ? '甲' : level; level = level<101 ? '優' : level; System.out.println("你得到:"+level); } 程式在程式區\java(1)\Ch03\Ch03_02.java 在level = level < 60 ? ‘丁’ : level; 是指當level < 60時, 就將level設定為‘丁’, 如果level >= 60 時, 就將level 設定為原值 而當level 一旦被設定為‘甲’, ‘乙’, …後, 由於其unicode大於255, 所以其再作分數的判斷時, 不再會有任何更動

練習五 將上一頁程式中的部份程式碼順序作更動如下,是否仍然可以得到相同結果? Level = level<101 ? ‘優' : level; level = level<90 ? ‘甲' : level; level = level<80 ? '乙' : level; level = level<70 ? ‘丙' : level; level = level<60 ? ‘丁' : level; System.out.println("你得到:"+level); (由於可能要用到 “且” 所以留到p.26再做) 程式區\java(1)\Ch03\Ex03_05.java

練習六 將五個數值23, 45, 43, 21, 67依序設定給變數a1, a2, a3, a4,a5. 將a1的值給a2, a2給a3, a3給a4, a4給a5, a5給a1 找出五個數中最大值及最小值(用最少個程式碼) 程式於程式區\Java(1)\Ch03\Ex03_06.java

隨堂口試 問下列程式敘述執行後,a,b,c的值各為多少 int a = 1, b = 2, c; c = a > b ? a++ : b++; 程式於程式區\java(1)\Ch03\q03_01.java A = 1, b = 3, c = 2

邏輯運算子 邏輯運算子語法 真值表 運算子 意義 語法 && 且,and a && b || 或,or a || b ! 非,not ! a true false

邏輯運算子 運算順序: ! > 關係運算子 > && > || && 和 || 稱為快捷運算子(short circuit) 當a&&b時, 如果知道a為false, 則a&&b一定為false 當a||b時, 如果知道a 為true , 則a||b一定為true, 不用等b的值 (6<5) && (39>17) && (a==7) false 不判斷 不判斷 (3<9) || (7<12) || (b<=a) true 不判斷 不判斷

範例3:Ch03_03.java int a=100, b=100; boolean c=false, d=false; System.out.println(6<5 && 39>17 && a==7); System.out.println(3<9 || 7<12 || b<=a); c = 3>4 && (d=true); System.out.println("Try1: c="+c+"\td="+d); c = 3>2 && (d=true); System.out.println("Try2: c="+c+"\td="+d); 程式於程式區\java(1)\Ch05\Ch03_03.java 結果: Flase True Try1: c=false d=false Try2: c=true d=true

練習5(續) 請完成練習5

位元運算子 運算子 說明 & 以兩數值逐位元做且(and)運算。 | 以兩數值逐位元做或(or)運算。 ~ 以一數值逐位元做非(not)運算,也就是取1補數。 ^ 以兩數值逐位元做互斥(exclusive or)。兩位元不一樣時得1,同為0或同為1時得0。 << 位元左移(left shift)。 >> 位元有號右移(right shift)。 >>> 位元無號右移(unsigned right shift)。

位元運算子 35變換成二進位為100011

位元運算子 &、| 與 ^, 例: 59和38 的位元運算

範例4:位元運算(Ch03_04.java) //整數型別(int)都可以使用位元運算子 //(byte, char, short)在運算時,會自動轉換為int char a=59; byte b=38; System.out.println( "59 & 38 = " + (a&b) ); System.out.println( "59 | 38 = " + (a|b) ); System.out.println( "59 ^ 38 = " + (a^b) ); 程式於程式區\java(1)\ch03\Ch03_04.java 結果: 59 & 38 = 34 59 | 38 = 63 59 ^ 38 = 29

位元運算子& | ^ 利用& 或 | 或 ^ 運算來作位元罩 位元罩: 可用來顯示特定的位元

範例5:判斷奇偶數(Ch03_05.java) //判斷奇數或偶數, 只要檢查最後一碼 int i=32, j=17; System.out.println( “i為” + ((i&1)==1 ? “奇數” : “偶數”) ); System.out.println( "j為" + ((j&1)==1 ? "奇數" : "偶數") ); 程式於程式區\java(1)\ch03\Ch03_05.java 結果: I 為偶數 J 為奇數

位元運算子~ 循環性的位元表示法

範例6:原數加補數(Ch03_07.java) //經過~運算所得的整數(即1‘s補數)與原整數相加, 會得到-1 // 主程式部份 public static void main(String [] args) { int i=41; int j=~i; System.out.println(i); printIntBits(i); System.out.println(j); printIntBits(j); System.out.println(i + j); } 程式於程式區\java(1)\Ch03\Ch03_07.java

範例6:Ch03_07.java(續) //方法printIntBits, 將整數以二進位輸出 static void printIntBits(int n) { int bits = 32; int m; for(int i=0; i<bits; i++) m = n >>> (bits-1-i); System.out.print(m&1); } System.out.println("");

範例7:最大整數加1(Ch03_08.java) //計算一int型別的變數i, 若i為最大int值2147483647 System.out.println(i); printIntBits(i); i+=2; System.out.println(~i); printIntBits(~i); 程式於程式區\java(1)\Ch03\Ch03_08.java

練習六 利用 | 作為位元罩, 將59轉換為二進位輸出 程式於程式區\java(1)\Ch03\Ex03_08.java

資料型態的轉換 JAVA程式設計入門(I)

型別轉換 數值型別的階級 運算時型別轉換過程 但是byte、short 和 char運算時,全都轉換為int,所以 double > float > long > int 6 + 2.4 轉換為→ 6.0 + 2.4 6.0 + 2.4 進行加法運算→ 8.4 short a=1, b=2, c; c=a+b; //錯誤!int型別不能指定給short型別

型別轉換 使用+運算子時,byte和short型別的運算元會自動轉換成int型別,然而使用++和+=時,運算元的型別不會轉換 變數的常數指定:若常數沒有超出變數可表現的範圍,則編輯器會將常數轉換成變數的型別再指定給變數 byte b = 200; //錯誤!found:int short s = 200; //合法

型別轉換 運算時的型別自動轉換表 byte short char int long float double

型別轉換 強制型別轉換 定型運算子語法:目的型別為Java的任一基本資型別 強制型別轉換也可以提高運算結果的準確度 由高準確度型別轉換至低準確度型別(型別降級),其準確度可能會嚴重下降 強制型別轉換也可以提高運算結果的準確度 (目的型別)運算式 (int)2.75  結果為2 (float)12/5 或 12/(float)5

範例8:Ch03_11.java int i=8, j=3; byte a=127, b=1, c; System.out.println( i/j ); System.out.println( (float)i/j ); System.out.println( i/(float)j ); c=(byte)(a+b); System.out.println(c); 程式於程式區\java(1)\Ch03\Ch03_11.java

運算子的優先權 單元運算子 算術運算子 位元移動運算子 關係運算子 邏輯運算子 條件運算子 指定運算子

運算子的優先權和結合性 優先權等級 運算子 說明 結合性 1 ! ~ ++ -- - + 邏輯的「非」 位元的「非」 累加 漸減 負號 正號 由右至左 2 (type) 定型運算子 3 * / % 乘號 除號 求餘數 由左至右 4 加號 減號 5 << >> >>> 位元左移 位元右移 位元無號右移

運算子的優先權和結合性 優先權等級 運算子 說明 結合性 6 < <= > >= 是否小於 是否小於等於 是否大於 是否大於等於 由左至右 7 == != 是否等於 是否不等於 8 & 位元的「且」 9 ^ 位元的「互斥」 10 | 位元的「或」 11 && 邏輯的「且」 12 || 邏輯的「或」 13 ?: 條件運算子 由右至左 14 = +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>= 指定運算子 指定類運算子

練習七 假設您步行的速度為每秒 1 公尺, 而您的朋友小華步行的速度則為每秒 30 英吋, 如果你們兩人在距離 200 公尺的操場面對面前進, 請撰寫程式計算出多久會相遇? (1 英吋等於 2.54 公分)

練習八 假設某個停車場的費率是停車 2 小時以內, 每半小時 30 元, 超過 2 小時, 但未滿 4 小時的部分, 每半小時 40 元, 超過 4 小時以上的部分, 每半小時 60 元, 未滿半小時部分不計費。如果您從早上 10 點 23 分停到下午 3 點 20 分, 請撰寫程式計算共需繳交的停車費。

SCJP 模擬試題(1) 1. Given the following code: What is the result? 1. public class Compare { 2. public static void main(String[] argv) { 3. String s = "12"; 4. int i = s; 5. long j = 12; 6. System.out.println("(i == j) is " + (i == j)); 7. } 8. } What is the result? A. (i == j) is false B. (i == j) is true C. Compilation fails at line 4. D. Compilation fails at line 6. E. There is a runtime error. C

SCJP 模擬試題(2) 2.Given the following code: What is the result? 1. public class StrAdd { 2. public static void main(String[] argv) { 3. String s = "55" + '5'; 4. System.out.println("Output: " + (s += 3)); 5. } 6. } What is the result? A. Output: 558 B. Output: 5553 C. Compilation fails at line 3 D. Compilation fails at line 4 E. There is a runtime error B

SCJP 模擬試題(3) 3. Given the following code: 1. public class Xvalue { 2. public static void main(String[] argv) { 3. String s = "123"; 4. // insert code here 5. System.out.println("x = " + x); 6. } 7. } Which, inserted at line 4, will compile correctly? (Choose all that apply.)  A. float x = 128.5; B. double x = s.length(); C. byte x = (byte) 120 + 1; D. short x = s.length(); E. int x = 255L; B C

SCJP 模擬試題(4) 4. Given the following code: What is the result? 1. public class TestStr { 2. public static void main(String[] argv) { 3. String s = "123"; 4. int i = 3, j = 5; 5. if (i = s.length()) 6. s += (i++) + i; 7. System.out.println("s = " + s); 8. } 9. } What is the result?  A. s = 1236 B. s = 1237 C. s = 1238 D. Compilation fails. E. Runtime error. D

SCJP 模擬試題(5) 5. Given the following code: What is the result? A. 245 1. public class Calc { 2. public static void main(String[] argv) { 3. int i = 3, j = 2, k = 1; 4. if ((--i == j) || (i == j++)) 5. k += (i == j? i++ : ++j); 6. System.out.println("ijk = " + i + j + k); 7. } 8. } What is the result? A. 245 B. 321 C. 323 D. 333 E. 345 C

SCJP 模擬試題(6) 6. Given the following code: 1. public class foo { 2. public static void main (String[] argv) { 3. int i = 0xFFFFFFF1; 4. int j = ~i; 5. System.out.println(j); 6. } 7. } What is the printed value of j? A. 14 B. -14 C. 15 D. –15 E. An error at line 3 causes compilation fails. A

SCJP 模擬試題(7) Which two of following declarations are illegal? A. S1 public class Decli { public static void main(String[] args) { int i = 0xFEDBA987; // S1 char c = 65535; // S2 char d = -32767; // S3 short j = -32767; // S4 long L = 0x123456789; // S5 byte b = (byte)65535; // S6 } A. S1 B. S2 C. S3 D. S4 E. S5 F. S6 C E