程設一
靜宜賽碼場 – 網頁版 註冊 http://coding.pu.arping.me/
靜宜賽碼場 – 註冊
靜宜賽碼場 – 註冊
靜宜賽碼場 – 註冊 填寫「學習家族組名」
靜宜賽碼場 – 註冊
靜宜賽碼場 – 網頁版 加選課程
靜宜賽碼場 – 軟體版 路徑: 執行:
靜宜賽碼場 – 軟體版 6 2 3 4 1 5
JAVA檔 class method Note: 1、「;」:一行的結束 2、「{」:一層的開始 「}」:一層的結束 3、利用tab鍵分層 寫入你的程式碼 1、JAVA檔的檔名要跟內部的其中一個class名稱相同,並且為public class 2、一個java檔內只能有一個public class 3、一個project只會有一個main method,會從多個java檔中找尋一個main method為程式的進入點 Note: 1、「;」:一行的結束 2、「{」:一層的開始 「}」:一層的結束 3、利用tab鍵分層
kb_practice_helloJava 練習 kb_practice_helloJava
程式的用途 自用 破壞
程式語言分類 第一代 機器語言 第二代 組合語言 第三代 高階語言(程序導向語言) Ex: FORTRAN、COBOL、PASCAL、Ada、C、BASIC、Perl 第四代 極高階語言(物件導向語言) Ex: C++、JAVA、VB、PHP、C#、Python、smalltalk 第五代 LISP、PROLOG
程式的執行 編譯器 Source code execute EX: JDK
程式的執行 – 實例 C、C++:編譯 JAVA:編譯+直譯 載入階段 執行階段 compiler linker loader Source code Object code Execute code RAM 執行 .obj .exe (binary code) JAVA:編譯+直譯 靜態宣告:載入階段時執行,ex: int a[10]; 動態宣告:執行階段時執行,ex: int* a = new int[10]; compiler Source code Byte code JVM .class interpreter Compiler:將高階程式翻譯成組合語言程式 Linker: 連結函式庫 Loader: 載入到memory
JDK ( Java SE Development Kits) JAVA ME JAVA EE 大型網站開發 JAVA SE (JDK) 手機、嵌入式系統 一般應用程式適用
寫程式的準則 要排版 變數的命名須有意義 要會debug Ex: 有排版: 沒排版: int a; // 不好的命名 int age; // 好的命名 利用tab鍵來縮排
JAVA Project Project Package Java檔 Java檔 Java檔 Class Package Package method method Class
JAVA Project - Example Project name Package name
Data type Ex:
Data type range
變數的命名 原則: 1、有意義 2、不要太長 EX: 開頭小寫,表示data type 開頭小寫 開頭大寫 Note:關鍵字:藍色 -> 不可宣告成變數 識別字:黑色 -> 可宣告成變數
Example1-宣告、給值 宣告、給值 分開寫 宣告、給值 寫在一起 多個變數
Example2 – 宣告、給值 a = ???
Output 法一: 使用System.out.println 法二: 使用System.out.printf
System.out.printf %d:用於整數 Ex: %f:用於浮點數
Input
練習 kb_practice_inputOutput 輸入三個data, 第一個為int型態的data 第二個為double型態的data 第三個為String型態的data 印出此三個data kb_practice_inputOutput
加分題 若有兩個整數x=1、y=2,如何運用第三個變數z,將x與y兩數的內容交換? kb_swap
Operator(運算子)
% 用途:取餘數 應用:切割整數 Ex:
++、-- 後置加:a++ 前置加:++a
除法 // 宣告int // 宣告double
浮點數 Case1: Case2:
Example what's wrong ??
練習 觀察下列式子的結果 kb_practice_++
HW Calculate Body Mass Index (BMI)
if、else 用途:條件判斷,用在2選1的情況 語法: Ex : 1 不是做case1就是做case2 2
練習1 輸入2個整數a、b,若a>=b或a==10則執行a-b並印出,否則執行a+b並印出 kb_practice_ifelse
練習2 kb_practice_ifelse2 考試成績有六個級別 A B C D E F 分別對應分數 90+ 80+ 70+ 60+ 60 60- 利用if else技巧,輸入分數印出對應的級別 kb_practice_ifelse2
HW 輸入一個整數,若是奇數,輸出字串Odd,否則輸出字串Even。 P1Test-023
else if 用途:條件判斷,用在n選1的情況(n>=3) 搭配if、else使用 語法: 1 2 4選1, 從case1~case4選其中執行 3 4
else if - example
else if - example 下列兩者的差異?
if…else VS else if If…else:2選1 else if: n選1,
練習 kb_practic_elseif 有一組數列如下 100 78 3 46 輸入一個整數,由左至右掃描上列此組數列,當符合 此整數時則印出 ” match” 並且結束, 否則印出”Not match” kb_practic_elseif
練習 1032-P1-下9週-Test1-判斷閏年 (30 points) 1、西元年份是400的倍數 想法: 1、西元年份是400的倍數 2、西元年份是4的倍數但不是100的倍數 閏年
練習 Given three numbers x, y, and z, find out if x, y, and z can represent the lengths of the sides of a triangle. kb_FindOutIfTriangle
統一作業 P1-hw007 1042-前九週-P1-hw007-判斷奇偶數(3%)
加分題 kb_guessNum 輸入4個整數, 其中第一數為答案碼 (000~999) 第二數~第四數為輸入碼(0~9), 檢驗是否猜中 (第一數包含第二~第四數即猜中) note:數字可重複 ex: 856 5 6 8 猜中 784 7 7 1 未猜中 kb_guessNum
迴圈 種類 for while do … while
for 語法: Ex1: Ex2:
for 如何不執行完迴圈就先行離開? Ex: 「break」
練習 kb_practice_for 輸入一個整數n 1、若n值大於5,則印出 ”Fail” 2、否則利用for迴圈方式印出n次 ”hello”
練習 kb_practice_for2 輸入一個整數n , 1、若n<1 或 n>100則輸出"Fail"
練習 P1Test-018 輸入一個整數n 利用for迴圈計算n!的值
巢狀迴圈
練習 kb_99multipyTable 顯示某區間的99乘法表 input: 2 5 output: 2x1 2x2 ......
HW P1Test-006 輸入兩個整數,計算兩個整數之間所有奇數的和
練習 kb_gcd 輸入兩個整數,計算兩個整數的最大公因數
上機模擬考 kb_game 遊戲主角有1000血量, 受到n次攻擊,第一次受到的傷害量為A1....第n次受到的傷害量為An, 每受到1個傷害量主角可累績1點的怒氣, 當受到的傷害量>=1000時,則印出"主角死亡" 當怒氣100時則印出"主角發動max必殺技" 當怒氣99~50時印出"主角發動小技能" 當怒氣49~0時印出"主角發動普通攻擊" 當怒氣<0時印出"輸入錯誤“ Ex: input: 3 30 70 50 output: 主角發動max必殺技
程設三
Inheritance(繼承) 目的:重複使用code 原則: 語法: 愈上層的類別愈描象(base class or parent class) 愈下層的類別愈精確(derived class or child class) 語法: Parent class child class
example 可想像成super(w,h) == TwoDShape(w,h)
Visibility(能見度) JAVA visibility 同一個class 同一個package 不同個package All methods derived class Not Private ok Package(預設) Protected Ok: method Fail: variable public
程設四
Class與method的應用 應用:將class當作容器來儲存多個data Ex: Stack s; s.push(10);
HW1 Stack實作
HW2 (驗收HW1)
Abstract class 功能: 1、建構在繼承之上 2、只實作部份methods,abstract methods不實作 優點:讓base class較抽象化 語法: 第一個methods(未實作) 第二個methods(已實作) Note: abstract class 不可直接new
kb_practice_abstract 練習1 kb_practice_abstract
toString() 任何類別都預設有此method 用途:印出類別物件時可直接印出字串 語法: or 實作 All class 都繼承自Object這個類別 or 實作
kb_practice_toString 練習2 kb_practice_toString
Overriding(覆寫) Ex: 功能: 1、 建構在繼承之上 2、父類別與子類別具有同相名稱的method, Type相同 參數數量、type相同
Overloading(多載) 功能:多個methods名稱相同,但參數的型 態、個數不同 EX: 參數個數=1 參數型態= String 參數個數=2 參數型態= String、int
example overriding implement
kb_practice_overriding 練習3 kb_practice_overriding
HW3 abstract class (P4Test-017)
Polymorphism(多型) 前提:1、多型建構在繼承之上(已完成父子類別) 2、父類別與子類別具有相同名稱但不同功能的method (overriding) 優點:讓父類別當作子類別的通用型態,以增加使用上的 彈性,減少系統的開發複雜度 Ex: 父 子 讓車子變戰車 or 讓車子變馬車 or 讓車子變汽車 (向上轉型)
Example1 父 子 可用的成員變數、methods = class A + overriding overriding
kb_practice_polymorphism 練習4 kb_practice_polymorphism
Example2 印出?????? Step1: R擁有的methods (繼承) Step2: R轉型後methods的內容 Step3: 呼叫到的method Ans: 4
Interface(介面) – part1 功能:只宣告但所有methods都不實作 優點:讓base class更抽象化 建立: 介面名稱 (隨便命名) 僅宣告不實作 Note: 1、interface 不可直接new 2、interface 可繼承
Example 介面: 實作: 介面名稱 實作介面
練習5 Interface-002
HW4 P4Test-018
Interface(介面) – part2 同時實作多個介面: 介面1 介面2
練習6 interface-003
enum(列舉) Def:定義名詞來取代常數 宣告: 使用: 列舉名稱
練習7 kb_practice_enum
generic(泛型) 功能:讓type的使用更有彈性 Ex: 也不一定要用T
練習8 kb_practice_generic
HW4 P4Test-011
Exception 目的:讓你的程式在執行階段時更加穩固, 不易crash 語法1:自動偵測例外類型,利用「try」、「catch」 除0發生例外錯誤 必要 編譯階段 – compiling 載入階段 - 點兩下執行檔 執行階段 - 程式執行中 arithmeticException 非必要 萬用寫法
Exception type ArrayIndexOutOfBoundsException ArithmeticException
Example1 Method須加上此關鍵字 編譯階段 – compiling 載入階段 - 點兩下執行檔 執行階段 - 程式執行中
kb_practice_Exception 練習 kb_practice_Exception
Exception 語法2:手動引發例外 -> 利用「throw」 類別名稱, 可自行建立 or 使用內建類別 可加入例外訊息 再利用getMessage()取得訊息 引發例外後程式即會中斷,所以不會執行到此行
Exception 自行引發例外 + 不中斷的做法 內建類別 利用getMessage()取得回傳的訊息
Exception 自行引發例外 +不中斷的做法+不使用內建例外類別 自行建立例外類別 自行建立例外類別
Example2 印出例外回傳的字串 自動偵測哪種例外 手動指定哪種例外 若 a.div(11,1) 則輸出 “Exception: C>10” 自動偵測哪種例外 手動指定哪種例外
練習 Exception-007
統一作業 P4-hw008 P4-hw007 P4-hw006