---
# System prepended metadata

title: 2023/02/28 大綱
tags: [course a, course]

---

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