Skip to content

Instantly share code, notes, and snippets.

@allanbian1017
Created March 9, 2026 05:48
Show Gist options
  • Select an option

  • Save allanbian1017/e101cd4f66f972b20ae36857a0ed27da to your computer and use it in GitHub Desktop.

Select an option

Save allanbian1017/e101cd4f66f972b20ae36857a0ed27da to your computer and use it in GitHub Desktop.

📱 16 週高職 Android 與 Java 開發精要課程大綱

🎯 課程簡介

本課程專為高職生設計,為期 16 週。課程採「先穩固 Java 邏輯、再進入 Android 實戰」的漸進式結構。 前 4 週透過基礎語法建立邏輯與運算思維,第 5 週進行階段性術科測驗檢視成效。自第 6 週起,帶領學生實際進入 Android Studio,透過三個經典實用專案(BMI 計算器、跑馬燈、捷運到站查詢、數字猜謎),逐步熟悉介面開發、使用者互動、訊息交談窗及跨程式啟動等進階技巧。 課程最後將進行綜合性的術科期末測驗,並安排補考週確保每位學生皆能達到基礎開發能力。


📅 16 週課程總覽

【第一階段:Java 程式設計與基礎邏輯思維】

  • 第 1 週:行動裝置應用概論
  • 第 2 週:Java 程式設計基礎語法 (變數、資料型態、運算子)
  • 第 3 週:Java 程式設計 (For 迴圈、IF 條件判斷)
  • 第 4 週:Java 程式設計 (Array 陣列、Function 函式)
  • 第 5 週:🏆 術科期中測驗

【第二階段:Android App 基本介面與互動實戰】

  • 第 6 週:Java 程式設計使用者介面設計 — 常見基礎元件介紹與 BMI 計算器雛形
  • 第 7 週:基本介面元件 — BMI 計算器 (邏輯實裝與 Toast 互動)
  • 第 8 週:進階介面元件 — 跑馬燈 (TextView 動畫屬性與 Layout 應用)
  • 第 9 週:使用者互動設計 — 跑馬燈 (各種觸發事件與啟動控制)

【第三階段:進階交談窗與應用程式啟動】

  • 第 10 週:訊息與交談窗 (Dialog) — 臺北捷運列車到站站名 (靜態選單與 AlertDialog 初探)
  • 第 11 週:訊息與交談窗 (Dialog) — 臺北捷運列車到站站名 (陣列整合與動態選單實作)
  • 第 12 週:啟動程式中其他程式 (Action) — 數字猜謎 (Activity 間跳轉與亂數邏輯)
  • 第 13 週:啟動行動裝置內各種程式 (Intent) — 數字猜謎 (進階互動)
  • 第 14 週:啟動行動裝置內各種程式 (Intent) — 數字猜謎 (跨 App 啟動運用與結案)

【第四階段:學習成果驗收】

  • 第 15 週:🏆 術科期末測驗
  • 第 16 週:🎓 術科補考與課程總回顧

📖 每週詳細教學規劃與範例程式碼 (每週 3 小時)

第 1 週:行動裝置應用概論與物件導向初探

目標: 了解行動科技發展史,並完成基礎開發環境建置,初步認識「類別 (Class)」的概念。

  • 講授內容
    • 行動作業系統的演進 (Android vs iOS) 與系統架構簡介。
    • 開發環境 (Android Studio 或 VSCode Java 環境) 的下載與安裝說明。
    • 為什麼 Java 會有 Class (類別) 的概念? 「類別 (Class)」就像是工廠裡的「設計圖藍圖」,而「物件 (Object)」則是工廠對照藍圖量產出來的「實體」。 Java 是一種「物件導向程式語言」,萬物皆物件。為了要蓋出一棟大樓 (App),我們必須先畫設計圖,這就是為什麼所有 Java 程式碼都必須強制寫在 class { } 裡面的原因。
    • Java 程式架構逐字詳解
      • public: 代表公開的,讓這張設計圖能被系統拿去用。
      • class: 宣告這是一張名為 Main 的設計圖。
      • static: 靜態方法。讓電腦在還沒照著設計圖把東西蓋出來前,就能直接執行。
      • void: 執行完畢後沒有回傳值。
      • main(): 程式開始跑的第一個專屬入口。
    • 範例程式碼 1 (Hello World 初體驗)
      public class Main {
          public static void main(String[] args) {
              System.out.println("Hello World! 第一支 Java 程式");
          }
      }
    • 範例程式碼 2 (建立人生第一張設計圖 Class): 我們也可以自己畫設計圖。例如,一張描述「狗」的設計圖。
      // 檔名:Dog.java (定義了一張狗的設計圖)
      public class Dog {
          String name; // 狗的名字屬性
          int age;     // 狗的年紀屬性
      }
    • 範例程式碼 3 (把設計圖變成真實的物件實體)
      // 在主程式裡面,利用 new 關鍵字,把設計圖實體化變成一隻真的狗!
      public static void main(String[] args) {
          Dog myDog = new Dog();  // new = 產生實體物件
          myDog.name = "小白";     // 為這隻狗命名
          System.out.println("我的狗叫做:" + myDog.name);
      }
  • 實作任務 (Lab):編譯並執行第一支 Hello World 程式,並嘗試建立一個簡單的 Student 類別與產生物件。

第 2 週:Java 程式設計基礎語法

目標: 建立變數與記憶體概念,熟練基礎數學運算。

  • 講授內容
    • 什麼是變數 (Variable)? 把變數想像成是可以貼標籤的「空紙箱」,用來裝不同類型的資料。在 Java 中,我們要先決定這個箱子能裝什麼(宣告型態),才能把資料丟進去。
    • 運算子與賦值: 等號 = 代表「把右邊的結果丟進左邊的箱子」。搭配 +, -, *, /, % 計算。
    • 範例程式碼 1 (四大基礎變數宣告)
      String studentName = "林曉華";      // 字串箱子
      int age = 16;                      // 整數箱子 (年紀不會有小數點)
      double height = 165.5;             // 浮點數箱子 (身高需要精確到小數點)
      boolean isPass = true;             // 布林值箱子 (只有 true 或是 false)
    • 範例程式碼 2 (變數的數學運算與重新賦值)
      int applePrice = 25;
      int amount = 5;
      int total = applePrice * amount; // 右邊 25 * 5 算完後放入 total 箱子
      
      // 中途想再多買兩顆蘋果?
      amount = amount + 2;             // 將原本箱子裡的 5 拿出來加 2,再裝回原本的箱子裡 (變數是可以改變的)
      System.out.println("現在數量變為:" + amount); 
    • 範例程式碼 3 (結合字串輸出與 Scanner 互動)
      // 運用 Scanner 讀取使用者從鍵盤輸入的整數
      import java.util.Scanner;
      Scanner scan = new Scanner(System.in);
      
      System.out.println("請輸入您帶了多少錢:");
      int myMoney = scan.nextInt(); 
      int change = myMoney - total;    // 計算找零
      System.out.println(studentName + " 買蘋果共花費 " + total + " 元,找零 " + change + " 元");
  • 實作任務 (Lab):實作「簡易匯率換算機」與商品折扣計算。

第 3 週:Java 程式設計 (For、IF)

目標: 掌握程式的控制流程,讓電腦擁有判斷與重複執行的能力。

  • 講授內容
    • 條件分支 (If-Else): 讓電腦擁有判斷力。語法為「if (成立的條件) { 執行的事 }」。
      • 條件需要使用邏輯判斷符號:大於 (>)、小於 (<)、相符 (==)、不相等 (!=)。
      • 複合條件:&& 代表「且 (AND)」;|| 代表「或 (OR)」。
    • 範例程式碼 1 (單純的 If-Else 判斷)
      int score = 75;
      if (score >= 60) {
          System.out.println("太棒了!及格!");
      } else {
          System.out.println("不及格,準備補考!");
      }
    • 範例程式碼 2 (多重條件 Else-If 判斷)
      int money = 1500;
      if (money >= 2000) {
          System.out.println("去吃牛排大餐!");
      } else if (money >= 1000) {
          System.out.println("去吃平價火鍋!");
      } else {
          System.out.println("回家吃泡麵!");
      }
    • 迴圈控制 (For Loop): 需要重複執行程式碼時使用。結構為 for(初始狀態 ; 繼續跑的條件 ; 每跑一圈做的事)
    • 範例程式碼 3 (基礎 For 迴圈計數)
      // 從 i=1 開始;只要 i <= 5 就繼續跑;每跑完大括號就讓 i+1
      for (int i = 1; i <= 5; i++) {
          System.out.println("現在是跑道上的第 " + i + " 圈");
      }
    • 範例程式碼 4 (迴圈結合 If 進行篩選)
      // 找出 1 到 10 之間的「偶數」
      for (int i = 1; i <= 10; i++) {
          if (i % 2 == 0) { // 如果除以二的餘數是零
              System.out.println(i + " 是偶數");
          }
      }
  • 實作任務 (Lab):利用 If-Else 實作遊樂園收費標準判定,並運用迴圈印出九九乘法表。

第 4 週:Java 程式設計 (Array、Function)

目標: 學習大量資料的儲存方式,並學會將重複邏輯抽離為獨立的方法。

  • 講授內容
    • 陣列 (Array): 想像陣列是一個有編號的「置物櫃」,專門用來整齊存放多個「相同型態」的資料。置物櫃的第一個號碼 (Index 索引) 是從 0 開始算起。
    • 範例程式碼 1 (陣列的宣告與讀取)
      // 建立一個有三個層板的字串置物櫃,放置朋友的名字
      String[] friends = { "小明", "阿華", "阿嬌" }; 
      
      // 電腦規定陣列的索引 (Index) 是從 0 開始的
      System.out.println("我最好的朋友是:" + friends[0]); // 會印出小明
      System.out.println("我第二個朋友是:" + friends[1]); // 會印出阿華
    • 範例程式碼 2 (陣列與迴圈的完美組合)
      int[] scores = { 80, 95, 60, 70, 100 };
      int total = 0;
      
      // 利用陣列的 length 屬性來決定迴圈要跑幾次,自動加總全班成績!
      for (int i = 0; i < scores.length; i++) {
          total = total + scores[i]; 
      }
      System.out.println("全班總分數是:" + total);
    • 函式 (Function / Method): 函式就像是一台「果汁機」,你把水果 (參數) 丟進去,它隱藏內部的複雜運算過程,最後吐出一杯果汁 (回傳值) 給你。 好處是:相同的程式碼不用重複寫很多次,只要呼叫這台果汁機就好。
    • 範例程式碼 3 (打造自己的數學函式果汁機)
      // 建立一個名為 calculateArea (算面積) 的函式,規定要丟入寬和高,最後吐出一個總面積
      public static int calculateArea(int width, int height) {
          int area = width * height;
          return area; // return 就是吐出果汁 (回傳結果)
      }
    • 範例程式碼 4 (在主程式中呼叫函式)
      public static void main(String[] args) {
          // 主程式非常乾淨,直接啟動已經寫好的函式!
          int room1 = calculateArea(10, 5); 
          int room2 = calculateArea(20, 20);
          
          System.out.println("一號房間面積:" + room1);
          System.out.println("二號房間面積:" + room2);
      }
  • 實作任務 (Lab):撰寫 Function 計算出陣列內成績的平均分數。

第 5 週:🏆 術科期中測驗 (Java 基礎上機考)

測驗形式: 上機實作 (120 分鐘)。測驗前 4 週教導的變數、運算、If-Else、For 迴圈與基礎 Array 處理。

第 6 週:Java 程式設計使用者介面設計 — BMI 計算器雛形

目標: 進入 Android 介面設計,學習 XML 佈局基礎。

  • 講授內容
    • XML 佈局語言 (Extensible Markup Language): 用來設計 App 長什麼樣子的標籤語言。負責外觀長相,不管背後的邏輯。我們利用積木般的標籤疊出畫面。
    • 約束佈局 (ConstraintLayout): 不像是 Word 裡的換行排列。由於每一支手機螢幕大小都不同,所以我們替元件綁上透明的「彈簧橡皮筋 (約束線 Constraint)」,互相拉扯來達到不管在平板還是小手機上,元件都能漂亮置中的效果。
    • 常見的三大 UI 基礎元件
      • TextView:展示文字用的告示牌 (使用者只能看,不能改)。
      • EditText:可以讓使用者點擊並跳出虛擬小螢幕鍵盤打字的輸入框。
      • Button:可以按壓產生互動的按鈕。
    • 範例程式碼 1 (TextView 標題告示牌)
      <TextView
          android:id="@+id/tvTitle"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="歡迎使用 BMI 健康計算器" 
          android:textSize="24sp" /> <!-- sp 是文字專用的字體大小單位 -->
    • 範例程式碼 2 (EditText 數字輸入框)
      <!-- EditText:設定為只能輸入數字型小數點 (numberDecimal) -->
      <EditText
          android:id="@+id/editWeight"          <!-- 給它身分證字號,方便寫 Java 接觸 -->
          android:layout_width="match_parent"   <!-- 寬度拉滿撐開到跟手機螢幕一樣寬 -->
          android:layout_height="wrap_content"  <!-- 高度只要夠包住裡面的文字就好 -->
          android:hint="請輸入體重 (kg)"          <!-- 背景漂浮的灰色提示文字 -->
          android:inputType="numberDecimal" />
    • 範例程式碼 3 (Button 功能按鈕)
      <Button
          android:id="@+id/btnCalculate"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="開始計算" 
          android:backgroundTint="#FF6200EE" /> <!-- 改變按鈕底色 -->
  • 實作任務 (Lab):利用 XML 拉出具有大標題與精美輸入框的 BMI 計算器介面。

第 7 週:基本介面元件 — BMI 計算器 (邏輯與互動)

目標: Java 與 XML 結合,綁定按鈕監聽器並計算結果。

  • 講授內容
    • 讓畫面產生靈魂的兩個步驟
      1. 尋人啟事 (findViewById):利用上週在 XML 寫下的身分證字號 (id),把虛擬的畫面元件綁定到實體的 Java 變數上。
      2. 裝上竊聽器 (setOnClickListener):幫按鈕變數綁定一個耳朵。當使用者點擊這個按鈕時,電腦就會馬上啟動大括號 {} 裡面的魔法邏輯。
    • 資料型態強力轉換 (Double.parseDouble): 在輸入框打下的「50.5」對電腦來說是毫無計算能力的「文字符號」。我們必須強制對它施法,將字串 (String) 轉成帶小數點的浮點數數字 (Double),才能進行數學乘除運算。
    • 範例程式碼 1 (尋找綁定 XML 元件)
      // 在 Java 程式碼一開頭,把等一下要控制的三個積木全挖出來建立變數
      Button btnCalc = findViewById(R.id.btnCalculate);
      EditText editWeight = findViewById(R.id.editWeight);
      EditText editHeight = findViewById(R.id.editHeight);
    • 範例程式碼 2 (點擊按鈕擷取與運算)
      // 給按鈕掛上竊聽器 (監聽器)
      btnCalc.setOnClickListener(v -> {
          // 從 EditText 拿取文字,因為預設是字串,必須透過 parseDouble 強制轉成數字變數
          double weight = Double.parseDouble(editWeight.getText().toString());
          
          // 假設身高已經在設計時限制輸入的是「公分」,因此需要除以 100 變公尺
          double heightString = Double.parseDouble(editHeight.getText().toString());
          double heightInMeter = heightString / 100.0;
          
          // 進行 BMI 公式數學計算 (體重除以身高的平方)
          double bmi = weight / (heightInMeter * heightInMeter); 
      });
    • 範例程式碼 3 (短暫畫面回饋 Toast 吐司)
      // 搭配範例 2,算完結果後我們不能裝沒事,要立刻跳出畫面通知使用者結果!
      // Toast 就像烤土司機一樣,會從畫面上方/下方短暫彈出一個黑色的半透明文字框
      Toast.makeText(this, "計算成功!您的 BMI 為: " + bmi, Toast.LENGTH_SHORT).show();
  • 實作任務 (Lab):實裝完整體重與身高擷取,計算後用 Toast 顯示正確的 BMI 數值。

第 8 週:進階介面元件 — 跑馬燈

目標: 介紹動態文字效果,了解部分文字專屬的 XML 屬性組合。

  • 講授內容
    • 什麼是跑馬燈 (Marquee)? 當新聞標題太長,一行寫不完卻又不想換行時,就會讓文字像無接觸式輸送帶一樣從右邊滑到左邊。
    • 讓 TextView 動起來的四大金剛屬性
      1. singleLine="true":強制文字不准換行,全部擠在同一行。
      2. ellipsize="marquee":當文字超過螢幕寬度時,尾端不要變成「...」,而是採用跑馬燈模式。
      3. marqueeRepeatLimit="marquee_forever":設定跑馬燈要跑幾次?(這邊設定無限重複)。
      4. 需要在 Java 中賦予「焦點 (Focus)」,文字才會真的開始移動。
    • 範例程式碼 1 (一般過長文字標題的慘況)
      <!-- 預設如果寬度固定,文字太長時它會自動在畫面塞滿時幫你換行往下縮 -->
      <TextView
          android:layout_width="200dp"
          android:layout_height="wrap_content"
          android:text="這是一則非常長的新聞標題,如果什麼都不設定它就會自動變成好幾行..." />
    • 範例程式碼 2 (尾端加上點點點的省略號)
      <!-- 利用 ellipsize="end" 屬性,讓超過兩行的文字最後以 ... 省略 -->
      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="政府剛剛發布了強烈颱風特報,預計明天全台將會宣布停班停課的消息!"
          android:maxLines="1"
          android:ellipsize="end" /> 
    • 範例程式碼 3 (正式啟動:跑馬燈完全體)
      <TextView
          android:id="@+id/tvMarquee"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="政府發布強烈颱風特報,預計明天全台將宣布停班停課,請出門民眾小心自身安全..."
          android:singleLine="true"       
          android:ellipsize="marquee"     
          android:marqueeRepeatLimit="marquee_forever" /> 
  • 實作任務 (Lab):設計新聞 App 首頁,上方放一條美觀的新聞快訊跑馬燈 (TextView)。

第 9 週:使用者互動設計 — 跑馬燈

目標: 控制跑馬燈的狀態 (焦點) 與動態替換文字。

  • 講授內容
    • 什麼是元件的焦點 (Focus)? 想像舞台上只有一盞聚光燈,燈打在誰身上,誰就能有動作。文字框預設是沒有焦點的,所以我們必須用程式碼強制把聚光燈打在跑馬燈上 (setSelected(true)),它才會開始捲動。
    • 動態替換文字與顏色: 我們不僅能在 XML 設定文字,還能透過 Java 在程式執行中途,隨時攔截並把文字換掉。
    • 範例程式碼 1 (強制獲得焦點開始撥放)
      TextView tvMarquee = findViewById(R.id.tvMarquee);
      // 進入這個 Activity 時,直接塞一盞聚光燈給它,文字就會開始走馬看花
      tvMarquee.setSelected(true); 
    • 範例程式碼 2 (暫停按鈕:移除焦點)
      Button btnPause = findViewById(R.id.btnPause);
      btnPause.setOnClickListener(v -> {
          // 設定點擊暫停鈕後,把跑馬燈の焦點拿走 (false),帶狀捲動就會立刻煞車靜止
          tvMarquee.setSelected(false);
      });
    • 範例程式碼 3 (按下按鈕後動態改變文字與顏色狀態)
      Button btnChange = findViewById(R.id.btnChange);
      btnChange.setOnClickListener(v -> {
          // setText() 指令可以用來在中途竄改畫面的文字內容
          tvMarquee.setText("緊急快訊:明日本地停水公告!"); 
          
          // 為了引起注意,我們可以把文字顏色改成紅色
          tvMarquee.setTextColor(android.graphics.Color.RED); 
      });
  • 實作任務 (Lab):製作三個按鈕控制跑馬燈的「暫停(移除焦點)」、「播放」與「替換成緊急插播文字」。

第 10 週:訊息與交談窗 — 臺北捷運列車到站站名 (初探)

目標: 學習 AlertDialog 的實作與生命週期。

  • 講授內容
    • 為什麼不用 Toast 就好? Toast 像是一閃而過的流星,幾秒鐘就不見了。如果遇到「你確定要刪除所有照片嗎?」這種攸關生死的操作,我們需要一個會把畫面卡住、強迫使用者按「確定」或「取消」的對話框,這就是 AlertDialog
    • 建造者模式 (Builder): 蓋房子要一步一步來:先打地基 (Builder),設定外觀 (setTitle 跟 setMessage),安裝前門後門 (設定確定與取消按鈕),最後再揭開布幕 (show)。
    • 範例程式碼 1 (打地基與設定標題內文)
      // 準備建商 (Builder),this 代表要蓋在目前的畫面上
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setTitle("系統提示"); 
      builder.setMessage("歡迎使用臺北捷運查詢系統!"); 
    • 範例程式碼 2 (安裝確認按鈕與取消按鈕)
      // PositiveButton 通常代表「好/確定/同意」
      builder.setPositiveButton("我知道了", (dialog, which) -> {
          Toast.makeText(this,"使用者按下了確定", Toast.LENGTH_SHORT).show();
      });
      
      // NegativeButton 通常代表「取消/拒絕」
      builder.setNegativeButton("關閉", (dialog, which) -> {
          // 什麼都不寫,對話框也會自動關掉
      });
    • 範例程式碼 3 (揭開布幕:顯示視窗)
      // 前面設定再多,如果沒有呼叫 show(),對話框是永遠不會跑出來的!
      builder.show();
  • 實作任務 (Lab):完成捷運查詢介面,點擊按鈕跳出說明對話框,點選「了解」後關閉。

第 11 週:訊息與交談窗 — 臺北捷運列車到站站名 (陣列整合)

目標: 在 AlertDialog 中提供能讓使用者點選的選單陣列 (List)。

  • 講授內容
    • 把陣列變成選項清單: 我們之前學過用大括號 {} 存放很多文字的 String 陣列。現在我們可以把這個陣列餵給 AlertDialog,它就會自動長成一個可以點擊的選單!
    • 捕捉使用者的點擊 (which): 程式怎麼知道你點了第幾個選項?透過事件中的 which 參數(它其實就是我們學過的陣列索引 Index,從 0 開始算),就能反查出站名。
    • 範例程式碼 1 (建立資料陣列)
      // 準備好裝滿站名的陣列,這些就是等一下要變成選單的項目
      String[] stations = {"台北車站", "中山站", "雙連站", "民權西路站"};
    • 範例程式碼 2 (把陣列塞進對話框)
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setTitle("請選擇您目前所在的捷運站");
      
      // setItems:專門用來吃陣列資料的屬性
      builder.setItems(stations, (dialog, which) -> {
          // 這裡可以寫選項被點擊後的邏輯
      });
    • 範例程式碼 3 (取出被點擊的資料)
      // 接續上面的 setItems 內部...
      // which 代表使用者選了第幾個索引 (例如點中山站, which 就是 1)
      String selectedStation = stations[which];
      Toast.makeText(this, "您選擇了:" + selectedStation, Toast.LENGTH_SHORT).show();
      // 點擊選項後,彈出視窗會自動關閉,不用手動寫 close
  • 實作任務 (Lab):實作帶有多個捷運站名的點選對話框,選擇站點後透過 Toast 提示下一班車何時抵達。

第 12 週:啟動程式中其他程式 (Action) — 數字猜謎 (基礎)

目標: 學習 Activity 跳轉 (Intent) 與亂數取得。

  • 講授內容
    • Activity 的分身術: 一個畫面就是一個 Activity。如果要製作多個畫面的 App,我們就需要新增 Activity
    • 顯式意圖 (Explicit Intent): 意圖 (Intent) 就像計程車。顯式意圖就是「明確指名道姓」要送到哪裡。我們叫計程車從現在的畫面 (MainActivity.this),開車前往遊戲畫面 (PlayActivity.class)。
    • 範例程式碼 1 (建立跳轉計程車)
      // 準備計程車 (從這裡 MainActivity, 去那裡 PlayActivity)
      Intent intent = new Intent(MainActivity.this, PlayActivity.class);
    • 範例程式碼 2 (攜帶資料與發車)
      // 把玩家的名字當作伴手禮放進計程車後車廂 (名為 "PLAYER_NAME")
      intent.putExtra("PLAYER_NAME", "小智");
      // 開車!(開始轉換畫面)
      startActivity(intent);
    • 範例程式碼 3 (透過亂數產生電腦解答)
      // === 進入第二頁遊玩頁面後,電腦要自己想一個答案 ===
      // Math.random() 會給 0.00 ~ 0.99 之間的小數。
      // 乘上 100,變成 0.00 ~ 99.X,強制去尾轉整數變成 0 ~ 99,再加 1 變成 1 ~ 100。
      int randomAnswer = (int)(Math.random() * 100) + 1; 
      System.out.println("偷偷印出電腦想的隨機解答:" + randomAnswer);
  • 實作任務 (Lab):打造數字猜謎遊戲的首頁,點擊開始鈕後跳轉至另一個產生好亂數密碼的 Activity。

第 13 週:啟動行動裝置內各種程式 — 數字猜謎 (進階)

目標: 實作猜謎核心運算,將所有元件控制與條件判斷進行綜合。

  • 講授內容
    • 終極大串聯: 把本學期學過的 EditText 讀取、文字轉數字 (Integer.parseInt)、if-else 三重判斷 (太大/太小/猜中),全部融合在一起!
    • 提升遊戲體驗 (UX): 猜錯時,如果原本打的數字還留在框框裡,玩家要先刪除才能重打,很煩人。我們可以寫 editGuess.setText("") 把框框清成空字串。
    • 範例程式碼 1 (讀取玩家數字並轉型)
      // 從輸入框拿文字,強制轉成 int 整數
      String guessText = editGuess.getText().toString();
      int guess = Integer.parseInt(guessText);
    • 範例程式碼 2 (If-Else 核心猜對邏輯)
      if (guess == randomAnswer) {
          tvClue.setText("Bingo!恭喜猜對了!");
          btnGuess.setEnabled(false); // 猜中就把按鈕反白鎖死,避免重複點擊
      } 
    • 範例程式碼 3 (猜錯邏輯與清空對話框)
      else if (guess > randomAnswer) {
          tvClue.setText("太大了,請往更小的數字猜!");
          editGuess.setText(""); // 貼心設計:清空文字框,讓玩家省去刪除的時間
      } else {
          tvClue.setText("太小了,請往更大的數字猜!");
          editGuess.setText(""); 
      }
  • 實作任務 (Lab):設計輸入框與猜測按鈕。每次猜測給予提示,最多只能猜 5 次,次數用完需提示 Game Over。

第 14 週:啟動行動裝置內各種程式 (Intent) — 數字猜謎 (跨程式呼叫)

目標: 隱式意圖 (Implicit Intent) 的威力,啟動手機原生的其他應用程式 (瀏覽器、分享機制等)。

  • 講授內容
    • 隱式意圖 (Implicit Intent): 這次的計程車「不指名道姓」去哪,而是發出廣播:「誰可以幫我開網頁?」。手機裡只要有瀏覽器能力 (Chrome, Firefox) 的 App 都會舉手報名,系統就會自動開起外部 App 來服務我們。
    • 跨 App 的威力: 透過 Intent.ACTION_VIEW 開啟網址;透過 Intent.ACTION_DIAL 叫出撥號鍵盤。
    • 範例程式碼 1 (隱式意圖啟動外部瀏覽器上網)
      btnSearchCheat.setOnClickListener(v -> {
          // 準備一個網址,交給 Uri 解析
          Uri webUri = Uri.parse("https://www.google.com/search?q=猜數字必勝法");
          // ACTION_VIEW: 大眾查看動作的隱式廣播
          Intent webIntent = new Intent(Intent.ACTION_VIEW, webUri);
          startActivity(webIntent); // 啟動 Chrome
      });
    • 範例程式碼 2 (隱式意圖啟動內建撥號鍵盤)
      btnCallHelp.setOnClickListener(v -> {
          // tel: 開頭代表電話號碼協議
          Uri dialUri = Uri.parse("tel:0912345678");
          // ACTION_DIAL: 呼叫撥號鍵盤
          Intent callIntent = new Intent(Intent.ACTION_DIAL, dialUri);
          startActivity(callIntent); 
      });
    • 範例程式碼 3 (判斷意圖是否安全)
      // 預防萬一手機裡沒有能開網頁的 App,直接跳轉會導致程式閃退 (Crash)
      if (webIntent.resolveActivity(getPackageManager()) != null) {
          startActivity(webIntent);
      } else {
          Toast.makeText(this,"找不到可以開啟網頁的工具!", Toast.LENGTH_SHORT).show();
      }
  • 實作任務 (Lab):在猜謎結算畫面加入「搜尋必勝法」與「電話求救」兩顆按鈕,呼叫系統對應的 App (Browser / Action_Dial)。

第 15 週:術科期末測驗

目標: 評量學生對於 Android 基礎開發與 Java 邏輯的綜合應用能力。

  • 測驗題庫:👉 點擊檢視 10 題期末術科測驗題庫與解答
  • 測驗形式: 120-150 分鐘的實務專案開發。要求學生抽考一題,從無到有,設計包含 UI (排版、跑馬燈) 與後端互動邏輯 (按鈕控制、數值轉換、If-Else 判斷、AlertDialog 防呆),並完成跨 Activity Intent 的整合微型 App。
  • 實作任務 (Lab):完成期末專題測驗繳交。

第 16 週:補考與課程總回顧

目標: 未達標者進行補考,其餘同學進行 Android 進階知識指引與課程重點總複習。

  • 補考題庫:👉 點擊檢視 10 題補考測驗題庫與解答
  • 講授內容
    • 常見期末錯誤與 Debug 技巧解析。
    • 下一步學習建議 (如進階元件 RecyclerView、網路連線 API 或 Kotlin 語言轉換)。
  • 實作任務 (Lab):補考實務測驗與期末成績確認。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment