# 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`