第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.

Slides:



Advertisements
Similar presentations
多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
Advertisements

单元二:面向对象程序设计 任务二:借书卡程序设计.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
C#程序设计案例教程 第3章 程 序 结 构.
第一章 C语言概述 计算机公共教学部.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
TQC+ 物件導向程式認證-JAVA.
第二章 基本程式設計.
本章大綱 2-1、程式、程式語言、程式架構 2-2、變數與資料型態 2-3、常數 2-4、 運算式、運算子和運算元
第 5 章 流程控制 (一): 條件分支.
程設一.
第二章 JAVA语言基础.
第三章 控制结构.
程設一.
程式設計實作.
Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
控制流程 邏輯判斷 迴圈控制.
Class 2 流程控制-選擇敘述與迴圈.
物件導向程式設計 (Object-Oriented rogramming)
第二章 C# 基础知识.
常用工具类.
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第 7 章 陣列 (Array).
JAVA程序设计 第5章 深入理解JAVA语言----补充.
程式設計實作.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Java语言程序设计 第五部分 Java异常处理.
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
第三章 C# 基础知识.
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
第三课 标识符、关键字、数据类型.
第二章 Java基本语法 讲师:复凡.
C语言概述 第一章.
程式結構&語法.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
Review 1~3.
龍老師我不會Debug QQ.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
變數、資料型態、運算子.
第2章 Java语言基础.
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制

第一個Java程式 定義類別(Class) 定義區塊(Block) 定義main()方法(Method) 撰寫陳述(Statement) public class HelloJava { public static void main(String[] args) { System.out.println("嗨!我的第一個Java程式!"); }

Java寫作風格 Class Name請首字大寫 Variable Name和Method Name請首字小寫 如果名稱由數個英文字組成,第二個英文字以後首字大寫 內縮四個空格 註解部分如要變成說明文件,請遵照javadoc這個工具的寫作規則

Example /** * 第一行的兩個**用來告訴javadoc此部份註解要變成HTML文件的一部份 * 這段註解裡的所有文字都會變成此類別一開頭的說明 */ public class Hello { // Class Name首字大寫 * 此段註解會變成描述main方法的一部分 * @param argv 使用@param註記會產生參數(parameter)argv的相關說明 * @return 傳回值的意義說明 public static void main(String[] argv) { // Method Name首字小寫 // argv: array of references to String object int myVariable; // 變數宣告 int i, sum; for (i = 1, sum = 0; i <= 100; i++) { sum += i; } System.out.println("summation from 1 to 100 is "+sum);

給C使用者的第一個Java 程式 給了C使用者類似 printf() 的功能 public class HelloJavaForC { public static void main(String[] args) { System.out.printf("%s! 這是您的第一個Java程式!\n", "C語言Fan"); } System.out.printf("%s! 這是您的第二個Java程式!", "C語言Fan").println(); System.out.printf("%s! 這是您的第 %d 個Java程式!\n", "C語言Fan", 3);

為程式加入註解 原始碼檔案中被標註為註解的文字,編譯器不會去處理它 /* 作者:良葛格 * 功能:示範printf()方法 * 日期:2005/4/30 */ public class ThirdJavaForC { public static void main(String[] args) { // printf() 是J2SE 5.0的新功能,必須安裝JDK 5.0才能編譯 System.out.printf("%s! 這是您的第 %d 個Java程式!\n", "C語言Fan", 3); }

為程式加入註解 不能用巢狀方式來撰寫多行註解 多行註解可以包括單行註解 /* 註解文字1……bla…bla /* */ /* 註解文字1……bla…bla // 註解文字2……bla…bla */

使用Scanner取得輸入 在 J2SE 5.0中,可以使用java.util.Scanner類別取得使用者的輸入 可以使用這個工具的next()功能,來取得使用者的輸入字串 Scanner scanner = new Scanner(System.in); System.out.print("請輸入您的名字:"); System.out.printf("哈囉! %s!\n", scanner.next()); System.out.print("請輸入一個數字: "); System.out.printf("您輸入了 %d !\n", scanner.nextInt());

使用 BufferedReader 取得輸入 BufferedReader建構時接受java.io.Reader物件 可使用java.io.InputStreamReader BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(System.in)); System.out.print("請輸入一列文字,可包括空白: "); String text = bufferedReader.readLine(); System.out.println("您輸入的文字: " + text);

標準輸入輸出串流 System類別中的靜態物件out System標準輸入串流in 提供標準輸出串流(Stream)輸出 通常對應至顯示輸出(終端機輸出) 可以將輸出重新導向至一個檔案 java HelloJava > HelloJavaResult.txt System標準輸入串流in 在程式開始之後它會自動開啟,對應至鍵盤或其它的輸入來源

標準輸入輸出串流 標準錯誤輸出串流err 在程式執行後自動開啟,將指定的字串輸出至顯示裝置或其它指定的裝置 err會立即顯示錯誤訊息 System.out.println("使用out輸出訊息"); System.err.println("使用err輸出訊息"); java ErrDemo > ErrDemoResult.txt 使用err輸出訊息

輸出格式控制 System.out.println("\u0048\u0065\u006C\u006C\u006F"); 控制字元 作用 \\ 反斜線 \' 單引號' \" 雙引號" \uxxxx 以16進位數指定Unicode字元輸出 \xxx 以8進位數指定Unicode字元輸出 \b 倒退一個字元 \f 換頁 \n 換行 \r 游標移至行首 \t 跳格(一個Tab鍵) System.out.println("\u0048\u0065\u006C\u006C\u006F");

輸出格式控制 若是使用J2SE 5.0或更高的版本 // 輸出 19 的十進位表示 System.out.printf("%d%n", 19); // 輸出 19 的八進位表示 System.out.printf("%o%n", 19); // 輸出 19 的十六進位表示 System.out.printf("%x%n", 19);

格式字元 作  用 %% 在字串中顯示% %d 以10進位整數方式輸出,提供的數必須是Byte、Short、 Integer、Long、或BigInteger %f 將浮點數以10進位方式輸出,提供的數必須是Float、Double或 BigDecimal %e, %E 將浮點數以10進位方式輸出,並使用科學記號,提供的數必須是Float、 Double或BigDecimal %a, %A 使用科學記號輸出浮點數,以16進位輸出整數部份,以10進位輸出指數部份,提供的數必須是Float、Double、BigDecimal %o 以8進位整數方式輸出,提供的數必須是Byte、Short、 Integer、Long、或BigInteger %x, %X 將浮點數以16進位方式輸出,提供的數必須是Byte、Short、 Integer、Long、或BigInteger %s, %S 將字串格式化輸出 %c, %C 以字元方式輸出,提供的數必須是Byte、Short、Character或 Integer %b, %B 將"true"或"false"輸出(或"TRUE"、"FALSE",使用 %B)。另外,非null值輸出是"true",null值輸出是"false" %t, %T 輸出日期/時間的前置,詳請看線上API文件

輸出格式控制 可以在輸出浮點數時指定精度 可以指定輸出時,至少要預留的字元寬度 System.out.printf("example:%.2f%n", 19.234); example:19.23 可以指定輸出時,至少要預留的字元寬度 System.out.printf("example:%6.2f%n", 19.234); example: 19.23 補上一個空白在前端

基本的資料型態(Primitive type) 整數 短整數(short)(佔2個位元組) 整數(int)(佔4個位元組) 長整數(long)(佔8個位元組) 位元組 專門儲存位元資料 佔一個位元組 浮點數 浮點數(float)(佔4個位元組) 倍精度浮點數(double)(佔8個位元組)

基本的資料型態(Primitive type) 字元 採Unicode編碼 前128個字元編碼與ASCII編碼相容 每個字元資料型態佔兩個位元組 可儲存的字元範圍由'\u0000'到'\uFFFF' 布林數 佔記憶體2個位元組 可儲存true與false兩個數值

基本的資料型態(Primitive type) System.out.printf("short \t數值範圍:%d ~ %d\n", Short.MAX_VALUE, Short.MIN_VALUE); System.out.printf("int \t數值範圍:%d ~ %d\n", Integer.MAX_VALUE, Integer.MIN_VALUE); System.out.printf("long \t數值範圍:%d ~ %d\n", Long.MAX_VALUE, Long.MIN_VALUE); System.out.printf("byte \t數值範圍:%d ~ %d\n", Byte.MAX_VALUE, Byte.MIN_VALUE); System.out.printf("float \t數值範圍:%e ~ %e\n", Float.MAX_VALUE, Float.MIN_VALUE); System.out.printf("double \t數值範圍:%e ~ %e\n", Double.MAX_VALUE, Double.MIN_VALUE);

變數、常數 在Java中要使用變數,必須先宣告變數名稱與資料型態 使用int、float、double、char等關鍵字來宣告變數名稱並指定其資料型態 不可以使用數字作為開頭 不可以使用一些特殊字元,像是*&^%之類 不可以與Java 內定的關鍵字同名 int age; // 宣告一個整數變數 double scope; // 宣告一個倍精度浮點數變數

變數、常數 鼓勵用清楚的名稱來表明變數的作用 不可以宣告變數後,而在未指定任何值給它之前就使用它 編譯器在編譯時會回報這個錯誤 int ageOfStudent; int ageOfTeacher; variable var might not have been initialized

變數、常數 使用「指定運算子」'='來指定變數的值 int ageOfStudent = 5; double scoreOfStudent = 80.0; char levelOfStudent = 'B'; System.out.println("年級\t 得分\t 等級"); System.out.printf("%4d\t %4.1f\t %4c", ageOfStudent, scoreOfStudent, levelOfStudent);

變數、常數 宣告變數名稱的同時,加上“final”關鍵字來限定 這個變數一但指定了值,就不可以再改變它的值 final int maxNum = 10; maxNum = 20; cannot assign a value to final variable maxNum

算術運算 加(+)、減(-)、乘(*)、除(/)、餘除運算子(%) System.out.println(1 + 2 * 3); System.out.println((double)(1+2+3) / 4);

算術運算 這段程式會印出什麼結果? 使用下面的方法 int testNumber = 10; System.out.println(testNumber / 3); int testNumber = 10; System.out.println(testNumber / 3.0); System.out.println((double) testNumber / 3);

算術運算 將精確度大的值指定給精確度小的變數時,由於在精確度上會有遺失,編譯器會認定這是一個錯誤 int testInteger = 0; double testDouble = 3.14; testInteger = testDouble; System.out.println(testInteger); possible loss of precision found : double required: int testInteger = testDouble ^ 1 error

算術運算 必須明確加上轉換的限定字,編譯器才不會回報錯誤 '%'運算子是餘除運算子 testInteger = (int) testDouble; count = (count + 1) % 360;

比較、條件運算 大於(>)、不小於(>=)、小於(<)、不大於(<=)、等於(==)、不等於(!=) System.out.println("10 > 5 結果 " + (10 > 5)); System.out.println("10 >= 5 結果 " + (10 >= 5)); System.out.println("10 < 5 結果 " + (10 < 5)); System.out.println("10 <= 5 結果 " + (10 <= 5)); System.out.println("10 == 5 結果 " + (10 == 5)); System.out.println("10 != 5 結果 " + (10 != 5));

比較、條件運算 條件運算子 條件式 ? 成立傳回值 : 失敗傳回值 System.out.println("該生是否及格? " + (scoreOfStudent >= 60 ? '是' : '否')); System.out.println("是否為奇數? " + (number%2 != 0 ? '是' : '否'));

邏輯、位元運算 「且」(&&)、「或」(||)、「反相」(!) &(AND)、|(OR)、^(XOR)與~(補數) int number = 75; System.out.println((number > 70 && number < 80)); System.out.println((number > 80 || number < 75)); System.out.println(!(number > 80 || number < 75)); System.out.println("0 AND 0\t\t" + (0 & 0)); System.out.println("0 AND 1\t\t" + (0 & 1)); System.out.println("1 AND 0\t\t" + (1 & 0)); System.out.println("1 AND 1\t\t" + (1 & 1)); byte number = 0; System.out.println((int)(~number));

邏輯、位元運算 左移(<<)、右移(>>)、>>>運算子 int number = 1; System.out.println( "2的0次: " + number); number = number << 1; System.out.println("2的1次: " + number); System.out.println("2的2次: " + number); System.out.println("2的3次:" + number); 00000001  1 00000010  2 00000100  4 00001000  8

遞增、遞減運算 遞增、遞減運算子 將遞增或遞減運算子撰寫在變數之前或變數之後 int i = 0; System.out.println(++i); System.out.println(--i); int i = 0; int number = 0; number = ++i; // 相當於i = i + 1; number = i; System.out.println(number); number = --i; // 相當於i = i - 1; number = i;

遞增、遞減運算 將遞增或遞減運算子撰寫在變數之前或變數之後 int i = 0; int number = 0; number = i++; // 相當於number = i; i = i + 1; System.out.println(number); number = i--; // 相當於 number = i; i = i - 1;

遞增、遞減運算 指定運算子 範 例 結 果 += a += b 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 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 a = a << b >>= a >>= b a = a >> b

if 條件式 語法 複合陳述句 if(條件式) 陳述句一; else 陳述句二; if(條件式) { 陳述句一; 陳述句二; } 陳述句三; 陳述句四;

if 條件式 Scanner scanner = new Scanner(System.in); System.out.print("請輸入數字: "); int input = scanner.nextInt(); int remain = input % 2; // 求除 2 的餘數 if(remain == 1) // 如果餘數為1 System.out.println(input + "為奇數"); else System.out.println(input + "為偶數");

if 條件式 if 中再設定執行的條件 if(條件式一) { 陳述句一; if(條件式二) 陳述句二; 陳述句三; } if(條件式一) { // 其它陳述句 } else if(條件式二) 陳述句二; if(條件式一) { 陳述句一; // 其它陳述句 } else if(條件式二) 陳述句二;

if 條件式 Scanner scanner = new Scanner(System.in); System.out.print("輸入分數:"); int score = scanner.nextInt(); if(score >= 90) System.out.println("得A"); else if(score >= 80 && score < 90) System.out.println("得B"); else if(score >= 70 && score < 80) System.out.println("得C"); else if(score >= 60 && score < 70) System.out.println("得D"); else System.out.println("得E(不及格)");

switch 條件式 switch的語法架構 switch(變數名稱或運算式) { case 符合數字或字元: 陳述句一; break; 陳述句二; default: 陳述三; }

Scanner scanner = new Scanner(System.in); System.out.print("請輸入分數: "); int score = scanner.nextInt(); int level = (int) score/10; switch(level) { case 10: case 9: System.out.println("得A"); break; case 8: System.out.println("得B"); case 7: System.out.println("得C"); case 6: System.out.println("得D"); default: System.out.println("得E(不及格)");

for 迴圈 基本語法 for(初始式; 判斷式; 遞增式) { 陳述句一; 陳述句二; } for(int j = 1; j < 10; j++) { for(int i = 2; i < 10; i++) { System.out.printf("%d*%d=%2d ",i, j, i * j); } System.out.println();

for 迴圈 for括號中的每個陳述區塊是以分號 ';' 作區隔,而在一個陳述區塊中若想寫兩個以上的陳述句,則使用逗號 ',' 作區隔 for (int i = 2, j = 1; j < 10; i = (i==9)?((++j/j)+1):(i+1)) { System.out.printf("%d*%d=%2d%c", i, j, i * j, (i==9 ? '\n' : ' ')); }

while 迴圈 Scanner scanner = new Scanner(System.in); int score = 0; int sum = 0; int count = -1; while(score != -1) { count++; sum += score; System.out.print("輸入分數(-1結束):"); score = scanner.nextInt(); } System.out.println("平均:" + (double) sum/count)

while 迴圈 Scanner scanner = new Scanner(System.in); int input = 0; int replay = 0; do { System.out.print("輸入整數值:"); input = scanner.nextInt(); System.out.println("輸入數為奇數?" + ((input%2 == 1) ? 'Y': 'N')); System.out.print("繼續(1:繼續 0:結束)?"); replay = scanner.nextInt(); } while(replay == 1);

break、continue break可以離開目前switch、for、while、do while的區塊 for(int i = 1; i < 10; i++) { if(i == 5) break; System.out.println("i = " + i); } for(int i = 1; i < 10; i++) { if(i == 5) continue; System.out.println("i = " + i); }

break、continue break與continue還可以配合標籤使用 back : { for(int i = 0; i < 10; i++) { if(i == 9) { System.out.println("break"); break back; } System.out.println("test");

break、continue break與continue還可以配合標籤使用 back1: for(int i = 0; i < 10; i++){ back2: for(int j = 0; j < 10; j++) { if(j == 9) { continue back1; } System.out.println("test");