程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.

Slides:



Advertisements
Similar presentations
第四章 类、对象和接口.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
四資二甲 第三週作業 物件導向程式設計.
C#程序设计案例教程 第3章 程 序 结 构.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
TQC+ 物件導向程式認證-JAVA.
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
第 5 章 流程控制 (一): 條件分支.
程設一.
第二章 JAVA语言基础.
類別與物件 Class & Object.
第三章 控制结构.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
Ch07 PHP程式基礎 網頁程式設計.
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
控制流程 邏輯判斷 迴圈控制.
物件導向程式設計 (Object-Oriented rogramming)
第二章 C# 基础知识.
C++Primer 3rd edition 中文版 Chap 5
第一次随堂作业(10.16) 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第六章 类的扩展与继承.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
本單元介紹何謂變數,及說明變數的宣告方式。
程式設計實作.
抽象类 File类 String类 StringBuffer类
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Java语言程序设计 第五部分 Java异常处理.
Java程序设计 第9章 继承和多态.
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Java程序设计 第2章 基本数据类型及操作.
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
第三章 C# 基础知识.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
C语言概述 第一章.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
第3章 JavaScript基本语句.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
C语言基本语句 判断循环.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文

Outline Control Flow Statements Your Turn 方法(Methods) Looping statement for statements while/do-while statements Branching statement break, continue, label: and return Your Turn 方法(Methods) 參數 (Arguments) 傳值 (Pass-by-Value) 傳址 (Pass-by-Reference) 傳回值 (return)

Control Flow Statements

Control Flow Statements – if-else if (expression) { BODY 1 if(expression) { BODY 1a } else { BODY 1b } else { BODY 2 }

Decision; Condition if (a>b) { max = a; min = b; } else { min = a; max = b; } if (c>max) { max = c; } if (c<min) { min = c; }

? : 運算子 public class Compare { public static void main (String[] args) int x = Integer.parseInt(args[0]); int y = Integer.parseInt(args[1]); int z = Integer.parseInt(args[2]); int max, min; max =x > y ? x : y; min =x < y ? x : y; max =z > max ? z : max; min =z < max ? z : min; System.out.println("Max: "+max+", Min: "+min); }

Control Flow Statements – switch-case switch statement expression的數值,將會被拿來比對下面每一個case的value 程式將會跳至第一個比對成功(數值相等)的地方繼續執行,假如遇到break;敘述,就結束整個switch敘述 否則將會一直往下比對。沒有比對成功的話,則執行default:之後的程式段 沒遇到break時,會繼續執行下一行指令敘述 switch(expression) { case value1: statements… break; case value2: … default: }

Control Flow Statements Looping 將一段程式,重複執行數次,我們稱這段重複執行的程式為迴圈。 Java looping statement 的種類: for while do-while

Control Flow Statements – for for statement 語法 initialization:初始條件 在此宣告之變數其有效範圍僅存在於此迴圈內 例:for(int x=0; x<10; x++) { … } termination:終止條件,決定何時迴圈結束 increment:遞增,每次迴圈進行後所要做的事 for( initialization; termination; increment ) { statements… }

Control Flow Statements – for Example: ForExample.java /** * 在螢幕上印出 1 ~ 10 */ for (int i=1; i <=10; i++) { System.out.println ("i = " + i); }

Control Flow Statements – for Example: ForExample.java /** * 印出 1~10, 最後在印出最後的 i 值 */ int i; for (i=1; i <=10; i++) System.out.println ("i = " + i); System.out.println ("After loop, i = " + i);

Control Flow Statements – for 迴圈控制變數 名稱習慣用 i , j , k 來命名,盡量在迴圈內使用就好,可降低程式錯誤的機率 在一個迴圈內,可以同時有多個控制變數 例:for(int i=1, j=i+1; i<5; i++, j=i*2) { … } 巢狀迴圈 for 迴圈中還有 for 迴圈 在複雜的情況下使用 無窮迴圈 infinite loop for(;;) {}

Control Flow Statements – for Example: ForExample.java /** * 一個迴圈內,可以有多個控制變數 */ int maxX = 10; int maxY = 15; for (int x = 0, y = 0; (x < maxX) && (y < maxY); x++, y = x * 2) { System.out.println(" x < 10 : " + x + ", y < 15 : " + y); }

Control Flow Statements – for Example: ForExample.java /** * 巢狀迴圈的使用方法 */ for (int i=1; i <=10; i++) { for (int j=1; j <=10; j++) { for (int k=1; k <=10; k++) { System.out.println("i = " + i + " j = " + j + " k = " + k); } // end of for k } // end of for j } // ned of for i

Control Flow Statements – while/do-while while statement 語法 while 會先執行括號內的運算式(expression),此運算式必回傳 true 或 false 若運算式結果為 true 則執行區塊內部敘述,否則跳離 適用情況:不知道幾次迴圈才會停止 無窮迴圈 while (true) { … } while (expression) { statements… }

Control Flow Statements – while/do-while Example: WhileExample.java public class WhileExample { public static void main(String[] args) { double r = 0; while(r < 0.99d) { r = Math.random(); // Math 類別中提供產生亂數的類別方法 System.out.println(r); } // end of while }

Control Flow Statements – while/do-while do-while statement 語法 do…while 敘述先執行區塊內部,執行完畢後才執行括號內的運算式(expression),回傳 true 或 false 若運算式結果為 true,則再執行區塊敘述,否則跳離 do…while 敘述必至少執行一次區塊內部敘述 Do { statements… } while (expression);

Control Flow Statements – while/do-while Example: DoWhileExample.java /** * 計算所有平方值小於 100 的數字並印出 */ public class DoWhileExample { public static void main (String[] args) { int i=0, j; do { i++; j = i * i; System.out.println ( i + " * " + i + " = " + j); } while (j < 100); }

Control Flow Statements – branching Branching Statements break 語法:break; 中斷執行,立即跳出 用在 switch、迴圈 continue 語法:continue; 跳過剩餘的程式碼,直接進行下一次迴圈 用在迴圈中 return 程式會跳出目前所在的 method,回到原先呼叫的 method 的地方 離開方法並回傳值:return count;

Control Flow Statements – branching Exmaple: BreakAndContinue.java for(int i = 0; i < 100; i++) { if(i == 74) break; // Out of for loop if(i % 9 != 0) continue; // Next iteration System.out.println(i); }

Control Flow Statements – branching break、continue 加上 label break 搭配 break 的使用,可以用來終止更外層的迴圈 contine 搭配 break 的使用,會跳過以 label 標示的外層迴圈當輪的執行,直接進行該外層迴圈的下一輪 label本身並不是一行指令,代表的是下一行程式開始執行的地方

Control Flow Statements – branching break with label search: for ( ; i < arrayOfInts.length; i++) { for (j = 0; j < arrayOfInts[i].length; j++) { if (arrayOfInts[i][j] == searchfor) { foundIt = true; break search; }

Control Flow Statements – branching continue with label test: for (int i = 0; i <= max; i++) { int n = substring.length(); while (n-- != 0) { if (n == 1) continue test; System.out.println(“no move!!!”); } //end of while foundIt = true; break test; } // end of for i

實例複習 實例:Menu.java 結合之前 decision making 以及 looping,可以做出一個使用者介面程式 可以根據使用者輸入的值來做相對應的功能

Your Turn Basic Practice 請寫出一個程式讀入一個整數,畫出以下形狀。 例如,java Triangle 4 * * * * * * * * * *

Your Turn Advanced Practice 請寫出一個程式讀入一個整數,畫出以下形狀。 例如:java Triangle2 3 * * * * * *

方法(Method) 定義 格式 範例:public static void main (String[] args); 可重複使用的程式碼片段 格式 範例:public static void main (String[] args); 存取範圍 方法特性 static final abstract native synchronized public protected (空白) private 方法傳回型態 方法名稱 (參數宣告);

方法(Method) 等同於 C/C++ 或其他語言中的函式(functions) 基本組成 參數 Arguments 參數型態 名稱(name) 參數(arguments) 傳進方法中的資訊 回傳值型態(return type) 主體(body) 參數 Arguments 參數是由逗號分隔的多個變數宣告所構成 例:int stuScore(String stuName, int stuNum) 參數型態 可以是任何合法的 Java 資料型態,包括 primitive 以及 reference 資料型態 ReturnType MethodName(Arg List) /* Method Declaration */ { /************ Method Body ************/ }

方法(Method) 定義 methods public Object push (Object item) 存取等級 static 宣告本 method 為 class method abstract 宣告本 method 內不需任何程式碼 final 宣告本 method 不允許被 subclass 覆蓋(override) native 宣告本 method 為其他程式語言所寫成 synchronized 必須由 monitor 來控制執行時機 (參數列) 參數列 throws 異常事件 宣告本 method 丟出的例外(exceptions)

方法(Method) 為 method 命名,一般命名習慣 將資料傳入method – 參數 應該採用英文動詞,可以串接多個單字:整個字串的第一個字母小寫,其他串接單字的第一個字母大寫 如: toString(), compareTo(), setX(), getX()… Method 名稱不能和 class 名稱一樣,因 class 名稱保留給建構元使用 將資料傳入method – 參數 只要是合法的 Java 資料型態,都可以傳入 method 中 如:double, float 與 int,或是物件 Java 中不允許將 methods 當成參數,傳入另一個 method 中

方法(Method) 在 Java 語言中,方法只能在類別中被創造 方法的呼叫 透過物件呼叫(instance methods) 必須使用正確的方法名稱、參數個數與型態 如 str.substring() 透過類別呼叫(static methods or class methods) 如:Math.power()

方法(Method) Example: MethodDemo.java static void printTriangle(int level) { int i, j; for ( i = 1; i <= level; i++) { for ( j = 1; j <= i; j++ ) System.out.print("*"); System.out.println(); }

參數傳遞(Passing Argument) 參數名稱 參數名稱在 method 中用來指稱所傳入的變數 參數名稱可與類別中的成員變數名稱相同,此時成員變數將被隱藏(hide),也就是說,在 method 中所指稱的乃所傳入之變數,此時可用 this 來指定成員變數 參數傳遞方式 傳值 Pass-by-Value 傳入參數為 primitive 型態,在 method 內對參數的改變將不影響原來 method 外變數的值 傳址 Pass-by-Reference 傳入參數為 reference 型態,無法更動 reference 對象,但可使用物件的 methods 與變數

參數傳遞(Passing Argument) Example: PassArgDemo.java static void myMethod1 (int i) { i += 1; System.out.println("In MyMethod(): " + i); } public static void main(String[] args) { int i = 10; // 參數以 primitive 的型態傳入 myMethod(i); // 不會改變在 main 中的 i 值 System.out.println("In main(): " + i);

參數傳遞(Passing Argument) Example: PassArgDemo.java static void myMethod2 (int[] i) { i[0] = i[0] +1; System.out.println("In MyFunc(): " + i[0]); } public static void main(String[] args) { int[] i = {10}; myMethod2(i); System.out.println("In main(): " + i[0]);

參數傳遞(Passing Argument) Memory i 0x5678 0x1234 public static void main(String[] args) i[0] 10 0x5678 0x5678 0x9012 i static void MyFunc(int[] i)

從 method 回傳數值(return) return 宣告 method 時可設定回傳型態,在 method 主體中,必須使用 return 敘述,回傳適當的數值 宣告為 void 的 method,不能包含任何 return 敘述 回傳的數值的資料型態,必須要符合 method 宣告設定的資料型態一致

從 method 回傳數值(return) Example: PassArgDemo.java static int myMethod3 (int i) { i *= 10; return i; } public static void main(String[] args) { int i = 10; int j = myMethod3(i); System.out.println("The return value: " + j);

Your Turn 試寫二個 static method 方法: static void printAdd2N(int max) static int getAdd2N(int max) 方別傳入一個參數 max,可以計算從 1 加到 max 的運算 最後再寫一個 main() 來測試 如: 1+2+3+4+5+6+7+8+9+10 = 55 Result: 55