110 一般警察特考三等 警察資訊管理人員 物件導向程式設計 考古題詳解

110 年・一般警察特考・三等・警察資訊管理人員
試題代碼 物件導向程式設計

第 一 題15 分

請寫出執行下列 Java 程式碼的輸出結果。

(一) public class Testa { public static void main(String[] args) { int[] a = {1, 2, 3, 4}; swap(a); System.out.println("a[0] = " + a[0]); }

public static void swap(int[] data) {
    int temp = data[0];
    data[0] = data[data.length - 1];
    data[data.length - 1] = temp;
}

}

(二) public class Testb { public static void main(String[] args) { T t = new T(); swap(t); System.out.println("e1 = " + t.e1 + ", e2 = " + t.e2); }

public static void swap(T t) {
    int temp = t.e1;
    t.e1 = t.e2;
    t.e2 = temp;
}

}

class T { int e1 = 1; int e2 = 2; }

(三) public class Testb { public static void main(String[] args) { T t = new T(); swap(t.e1, t.e2); System.out.println("e1 = " + t.e1 + ", e2 = " + t.e2); }

public static void swap(int e1, int e2) {
    int temp = e1;
    e1 = e2;
    e2 = temp;
}

}

class T { int e1 = 1; int e2 = 2; }

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考 Java 傳遞參數的方式,以及基本型別與參考型別在方法呼叫時的差異。

Java 一律採用傳值呼叫(pass by value):呼叫方法時,方法取得的是引數值的副本。

  • 若引數是基本型別,例如 int,複製的是整數值;方法內改動參數,不會改到呼叫端的變數。
  • 若引數是陣列或物件,複製的是參考值;呼叫端與方法中的參數會參考同一個陣列或物件。因此,方法透過參考修改其元素或欄位,呼叫端可觀察到修改結果。

解題方法

(一)傳入陣列,交換首尾元素

a 初始內容為 {1, 2, 3, 4}。呼叫 swap(a) 時,方法取得陣列參考值的副本,但該參考仍指向同一個陣列。

方法內:

  1. temp 先保存 data[0],即 1。
  2. data[0] = data[data.length - 1],將最後一個元素 4 放到第一格。
  3. data[data.length - 1] = temp,將原第一個元素 1 放到最後一格。

陣列變成 {4, 2, 3, 1},因此輸出:

a[0] = 4

(二)傳入物件,交換物件欄位

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二 題30 分

請設計程式,定義一個名為 Flower 的類別(class),該類別中每個物件有三個 private 實例變數(instance variables),分別代表花的名稱(name)、花瓣個數(petal)和價格(price),其資料型態應分別為 String、int 和 float。

您的類別應包含相關資料宣告、建構函式(constructor),以及存取三個資料的 getter 和 setter 方法(methods)。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查類別的基本設計:以 class 定義類別,將物件的狀態(資料)設為 private,再透過 public 的建構函式、getter 與 setter 方法建立及存取資料。

三個實例變數的名稱與型態分別為:

  • 花名:String name
  • 花瓣數:int petal
  • 價格:float price

解題方法

先依題意宣告三個 private 實例變數;再撰寫建構函式,以參數設定物件建立時的初始資料;最後為每個變數各提供一個 getter 與 setter。Java 的建構函式名稱須與類別名稱相同,且沒有回傳型態。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題15 分

Java 程式執行期間的錯誤會以例外(Exception)的形式被丟出。如果例外不作處理,程式便會終止執行。

請列舉出任意三種執行期間例外(RuntimeException)的子類別(subclass)名稱,並說明其發生原因。(15 分)

請說明在例外處理中使用 finally 子句(clause)的主要目的。(5 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Java 的例外類別主要分為受檢例外(checked exception)與非受檢例外(unchecked exception)。RuntimeException 及其子類別屬於非受檢例外,通常代表程式執行時發生的邏輯或資料使用錯誤;編譯器不要求程式必須以 catch 捕捉,或在方法宣告中以 throws 列出。

本題要掌握兩件事:能辨認常見的 RuntimeException 子類別及其發生原因,以及了解 finally 子句的用途。

解題方法

題目要求「任意三種」,因此可從常見的執行時錯誤中列舉三例,並將每一種例外與其觸發條件配對說明。答題時應寫出完整類別名稱,並說明錯誤發生的情境,而不只列出名稱。

finally 的重點則是:不論 try 區塊是否發生例外,以及例外是否被捕捉,通常都會執行 finally 區塊,常用於釋放資源或執行必要的收尾工作。

RuntimeException 子類別與發生原因

以下列出三種常見類別:

  1. NullPointerException(空指標例外) 程式透過值為 null 的參考存取物件欄位、呼叫物件方法,或進行其他需要實際物件的操作時發生。例如:對尚未指向物件的參考呼叫方法。

  2. ArrayIndexOutOfBoundsException(陣列索引超出範圍例外) 存取陣列時,使用小於 00 或大於等於陣列長度的索引值。例如,長度為 nn 的陣列,其有效索引範圍是 00 到 n−1n-1。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題10 分

請分別說明 this 及 super 兩個關鍵字(keyword)的使用情境。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查物件導向程式設計中,this 與 super 的用途。兩者都與物件的成員存取有關,但指涉對象不同:

  • this 指向目前正在執行方法的物件,可用來存取該物件的欄位、方法或建構子。
  • super 用於存取目前類別的父類別中被繼承的欄位、方法或建構子。

以下以 Java 說明。

解題方法

判斷兩個關鍵字時,先看要存取的是「目前物件」還是「父類別所繼承的成員」:

  1. 要指明目前物件的成員,使用 this。
  2. 要呼叫父類別的建構子,或明確呼叫父類別被覆寫的方法,使用 super。
  3. 若子類別與父類別有同名成員,this 指向子類別目前物件的成員;super 則可明確存取父類別版本。

例如:

class Parent {
 int value = 10;

 void show {
 System.out.println("Parent");
 }
}

class Child extends Parent {
 int value = 20;

 void show {
 System.out.println(this.value); // 20:Child 的 value
 System.out.println(super.value); // 10:Parent 的 value
 super.show; // 呼叫 Parent 的 show
 }
}

在建構子中,this(...) 可呼叫同一類別的另一個建構子;super(...) 可呼叫父類別的建構子。兩者若出現在建構子中,都必須是第一個敘述,且不能同時作為同一建構子的第一個呼叫。

class Child extends Parent {
 Child {
 super; // 呼叫父類別建構子
 }
}
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 五 題25 分

請設計程式從檔案(data.txt)讀入整數資料。若其中有資料重複出現,僅保留首次出現者,去除第二次以及後續之重複資料。最後,按原順序將資料輸出至檔案 unique.txt。

範例一:

檔案 data.txt 內容:3 4 5 7 9 5 4 19 4

檔案 unique.txt 內容:3 4 5 7 9 19

範例二:

檔案 data.txt 內容:128 5 7 23 4

檔案 unique.txt 內容:128 5 7 23 4

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 Java 檔案讀寫與集合的使用。以 Scanner 依序讀取 data.txt 中的整數,再用 HashSet<Integer> 記錄已出現的數字。Set.add 在數字首次加入時回傳 true,遇到重複數字時回傳 false,因此可判斷是否應輸出。

HashSet 不保證元素順序,但本題只用它判斷重複;資料一讀入就依原順序輸出,所以結果仍保留首次出現的順序。

解題方法

逐一讀取輸入整數,並呼叫 seen.add(number):

  • 回傳 true:首次出現,輸出至 unique.txt。
  • 回傳 false:曾經出現過,不輸出。

使用 first 旗標在數字之間輸出空格,避免檔案開頭或結尾多出空格。以下程式假設 data.txt 中的整數以空白或換行分隔,並與程式放在同一目錄。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題