# 2023/02/28 大綱 #### 1, 搜尋 Open JDK 17 以及 Eclipse. * Oracle jdk 17 https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html * zulu jdk 17 https://www.azul.com/downloads/ * Eclipse https://www.eclipse.org/downloads/ #### 2, Java 版本演進。 1-4 * 簡述版本,以及跨平台的特性(JVM)。 #### 3, 介紹 open jdk 及 oracle jdk 的差別在哪,推薦用什麼 jdk。 1-10 * 新聞事件 https://www.google.com/search?q=jdk+1.8+%E6%94%B6%E8%B2%BB * 開發新專案選擇版本時,要注意 LTS 問題 1-12 * https://zh.wikipedia.org/zh-tw/Java%E7%89%88%E6%9C%AC%E6%AD%B7%E5%8F%B2 * zulu jdk LTS https://www.azul.com/products/azul-support-roadmap/ #### 4, JVM, JDK, JRE 各別是什麼意思? 1-13 JVM、JDK 和 JRE 是 Java 開發與執行的相關技術,它們的用途如下: JVM(Java Virtual Machine):Java 虛擬機,是 Java 語言最重要的核心, 它提供了一個運行 Java 程式的環境,負責將 Java 程式編譯後的字節碼轉換成機 器碼,並執行程式。JVM 是一個跨平台的虛擬機,Java 程式在不同平台上運行時都 需要 JVM 的支持。 JDK(Java Development Kit):Java 開發工具包,包括了開發 Java 程式 所需要的所有工具和庫,如編譯器(javac)、JavaDoc 工具、JVM 等。JDK 包 含了 JRE,以及開發 Java 程式所需的開發工具,如編譯器、調試器、代碼分析工 具等。如果你需要開發 Java 程式,則需要安裝 JDK。 JRE(Java Runtime Environment):Java 運行環境,包含了 JVM 和 Java 程式執行所需的庫文件等,但不包括開發工具,如編譯器、調試器等。如果你只需要 執行 Java 程式,則只需要安裝 JRE。 簡單來說, 1, JVM 提供了一個運行 Java 程式的環境。 2, JDK 是一個包含了開發 Java 程式所需的所有工具和庫的開發工具包。 3, JRE 則是一個只包含了 Java 程式執行所需的庫文件等的運行環境。 #### 5, 安裝 JDK. 1-17 * windows 可以找 .msi 安裝檔,macOS 可以找 .dmg 檔案安裝,路徑問題就可以不用處理。 * 但能學會怎麼處理路徑問題,仍然是比較好。 #### 6, 路徑參數設定. 2-7 * https://ithelp.ithome.com.tw/articles/10259338 * 其他系統相關設定:顯示副檔名最好是打開 #### 7, 檢查安裝是否成功. 2-34 * 平時檢查環境版本也很常使用的指令 * windows : cmd -> java -version * macOs/Linux : terminal -> java -version #### 8, 安裝 IDE Eclipse, 也順便介紹一下 Intellij. 2-28 * https://www.jetbrains.com/idea/download/#section=windows #### 9, 新增專案 (2-31), package, class, 定義區塊 等. * 先直接照預設值使用,等後面課程再詳細解釋。 #### 10, 大略了解 main 的作用 2-4 * https://ithelp.ithome.com.tw/articles/10213592 #### 11, 第一個程式, Hello World. 解釋什麼是 literal constant 字面常量 3-8 * 若不使用變數,有大量的字面常量要修改時,就會產生困擾 * 帶入一些 reuse 的概念 #### 12, 說明變數使用, 宣告形態 * 同樣將 reuse 概念帶入 * 何謂變數 https://openhome.cc/zh-tw/java/syntax-abc/variable/ * 宣告變數:國中數學有教過 a = 1, b = 2 這樣的概念 * 八種基本形態 Primitive type 3-2 其中較常用的是 int long double boolean 等四種 https://openhome.cc/zh-tw/java/syntax-abc/type/ * 數值形態的變數,其值會有上下限。 * http://kaiching.org/pydoing/java-guide/unit-03-primitive-data-type-and-reference.html #### 13, 說明物件形態與基本形態的差異,及使用方式、限制 * 常用的類別形態 class type 或稱參考形態 reference type https://grantliblog.com/2020/10/24/30%e5%a4%a9%e6%89%8b%e6%8a%8a%e6%89%8b%e5%b8%b6%e4%bd%a0%e8%b7%9fjava%e8%ae%8a%e6%88%90%e5%a5%bd%e6%9c%8b%e5%8f%8b-day3-java%e5%9f%ba%e6%9c%ac%e5%9e%8b%e6%85%8b%e3%80%81%e8%ae%8a%e6%95%b8/ * String, Integer, Double, Float, Long #### 14, 運算子,比較,運算邏輯 * 加(+)減(-)乘(*)除(/)及餘數(%)的運用。 3-10 小數點的除法要用含有小數點的數字,除起來才會正確。 * double d1 = 3/2; //若印出答案會顯示 1, 錯誤 * double d2 = 3.0/2; //若印出答案會顯示 1.5, 正確 * 各種值之間的比較 3-11 * AND(&&) 及 OR(||) 的用法 3-12 * 遞增遞減運算 (++ - - 的運算) 3-16 * int i = 1; * i ++; //i 為 2 * //memo, 未講解, 忘記提 ++ i 與 i ++ 的差異,下次補。 * https://xanxusvervr.blogspot.com/2016/04/java-i-i_52.html * 指定運算 3-17 * int i = 1; * i += 1; //i 為 2 #### 15, 變數的形態轉換 * 數字類型的變數預設類型,以及形態轉換提升 數字類預設是 int, 即使將形態指定為 long 小數類預設是 double, 即使將形態指定為 float * 手動轉換形態 //memo, 未講解 #### 16, if else switch 3-22 #### 17, 迴圈 3-29 --- ## 228 作業題目: 1, 寫一個 Java 程式,該程式從用戶獲取一個整數 n, 然後列印出所有小於等於 n 的質數。 * 參考連結 http://euler.tn.edu.tw/think32.htm 2, 寫兩個方法,各傳入一個整數 n,然後計算 1 到 n 的所有數字的和。 * 第一個方法,使用迴圈。 * 第二個方法,使用國中數學公式:上底加下底乘以高除以二。 3, 寫一個方法,該方法將一個字串反轉。 * 如果輸入的字串內容是 "hello",那麼答案必須顯示 "olleh"。 * 如果輸入的字串內容是 "greater",那麼答案必須顯示 "retaerg"。 笨笨的寫法提示: String text = "hello"; int textLength = text.length(); //text 字串長度 System.out.println(textLength); //把變數印出,這邊會印出 5 //text.charAt(數字) + ""; //會回傳 text 這個字串的第幾個字, 不過回傳的會是 char 這個形態, //所以後面加上 + ""; 讓他變成一個標準的字串。 String t1 = text.charAt(0) + ""; //h String t2 = text.charAt(1) + ""; //e String t3 = text.charAt(2) + ""; //l String t4 = text.charAt(3) + ""; //l String t5 = text.charAt(4) + ""; //o System.out.println(t5 + t4 + t3 + t2 + t1); 請思考一個聰明一點的寫法。 --- ## 程式範例 ##### if else 範例 if (n > n2) { System.out.println("n greater than n2"); } else { System.out.println("n2 greater than n"); } if (n > n2) System.out.println("n greater than n2"); System.out.println(n > n2 ? "n greater than n2" : "n2 greater than n"); ##### 方法範例 //method 方法範例, 不傳入參數 public static String test() { String t = "test string"; return t; } //method 方法範例, 傳入參數 public static String test2(int x) { String t = "test string " + x; return t; } //method 方法範例, 不回傳 public static void test3(int x) { for (int i = 0; i < x; i ++) { System.out.println(i); } } ##### 輸入字元範例 import java.util.Scanner; public class InputNumber { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("請輸入一個整數:"); while (!scanner.hasNextInt()) { System.out.println("錯誤:您輸入的不是整數,請重新輸入。"); scanner.next(); } int input = scanner.nextInt(); System.out.println("您輸入的整數是:" + input); scanner.close(); } } ##### 九九乘法範例一 for (int i = 1; i < 10; i ++) { for (int j = 1; j < 10; j ++) { System.out.print(i + "x" + j + "=" + i * j + " "); } System.out.println(); } ##### 九九乘法範例二 for (int i = 1; i < 10; i ++) { for (int j = 1; j < 10; j ++) { String s1 = i + ""; if (i < 10) { s1 = " " + i; } String s2 = 2 + ""; if (j < 10) { s2 = " " + j; } String s3 = (i * j) + ""; if ((i * j) < 10) { s3 = " " + (i * j); } System.out.print(s1 + " x" + s2 + " = " + s3 + " "); } System.out.println(); } ##### 九九乘法範例三 for (int i = 1; i < 10; i ++) { for (int j = 1; j < 10; j ++) { int k = i * j; System.out.print( addSpaceToNumber(i) + " x" + addSpaceToNumber(j) + " = " + addSpaceToNumber(k) + "\t" ); } System.out.println(); } public static String addSpaceToNumber(int myNumber) { String str = ""; if (myNumber < 10) { str = " " + myNumber; } else { str = "" + myNumber; } return str; //精簡寫法,先標註起來 //return ((myNumber < 10 ? " " : "") + myNumber); } ## memo ChatGPT 註冊入口,選擇 Sign up https://chat.openai.com/auth/login?next=/chat markdown 語法教學 https://markdown.tw/ https://blog.maxkit.com.tw/2020/02/markdown.html 位元,位元組 https://openhome.cc/zh-tw/java/syntax-abc/type/ https://www.binaryconvert.com/convert_signed_int.html BigInteger, BigDecimal https://ithelp.ithome.com.tw/articles/10198197?sc=rss.qu clean code about class https://grantliblog.com/2021/06/19/clean-code-%e5%bf%83%e5%be%97-chapter10-%e9%a1%9e%e5%88%a5/ 位元轉換 https://blog.miniasp.com/post/2010/04/08/unit-information-Bit-Byte-KB-MB-GB-TB-PB-EB-ZB-YB * int isVariable; * 在這狀態下, isVariable 稱為變數(variable) * public static int functionName(int isParameter) {} * 在這狀態下, isParameter 稱為參數(parameter) * functionName(123) * 在這狀態下, 123 稱為引數(argument) ###### tags: `course a`, `course`