114-1 Java/Python 測驗題目詳解
1 考試資訊
考試時間: 2025-10-23 10:37:17 ~ 2025-10-23 10:57:17
2 第1題 (4分) - Java字串陣列初始化
題目:
String[] var1;
var1 = new String[3];
System.out.println(var1[1]);輸出為何?
選項: - (A) 0 - (B) a garbage character - (C) an empty string - (D) null ✓
詳解: 在Java中,當創建一個物件陣列(如String陣列)時,陣列中的每個元素會被自動初始化為null。因為String是參考型別(reference type)而非基本型別(primitive type),所以預設值是null而不是0或空字串。
知識點: - Java中基本型別的預設值:int為0,boolean為false等 - 參考型別的預設值:所有物件參考預設為null
3 第2題 (4分) - Java基本資料型別
題目: 以下哪個不是Java的基本資料型別(primitive data type)?
選項: - (A) String ✓ - (B) Float - (C) Boolean - (D) Byte
詳解: Java的8種基本資料型別為: 1. byte 2. short 3. int 4. long 5. float 6. double 7. char 8. boolean
String是一個類別(class),屬於參考型別,不是基本資料型別。注意選項中的Float、Boolean、Byte若是大寫開頭,實際上是對應的包裝類別(wrapper class),也不是基本型別。但題目很可能是指小寫的float、boolean、byte。
4 第3題 (4分) - Python執行機制
題目: Python程式碼是編譯的還是直譯的?
選項: - (A) Python code is only interpreted - (B) Python code is only compiled - (C) Python code is both compiled and interpreted ✓ - (D) Python code is neither compiled nor interpreted
詳解: Python是一種混合型語言: 1. 編譯階段: Python源碼(.py)首先被編譯成位元組碼(bytecode, .pyc檔案) 2. 直譯階段: 位元組碼再由Python虛擬機器(PVM)直譯執行
這種兩階段的執行方式結合了編譯和直譯的特性,所以答案是C。
5 第4題 (4分) - Python程式碼區塊定義
題目: Python中使用什麼來定義程式碼區塊?
選項: - (A) Brackets (大括號) - (B) Indentation (縮排) ✓ - (C) Semicolon (分號) - (D) All of the mentioned
詳解: Python的一大特色就是使用縮排(Indentation)來定義程式碼區塊,而不像Java、C++等語言使用大括號{}。正確的縮排不僅是風格問題,更是語法要求,縮排錯誤會導致IndentationError。
範例:
if True:
print("正確的縮排") # 這是if區塊內的程式碼
print("這不在if區塊內")6 第5題 (4分) - Python語法錯誤
題目: 以下Python程式碼的輸出為何?
i = 1
while True:
if i % 3 == 0:
break
print(i)
i + = 1選項: - (A) SyntaxError ✓ - (B) 1 2 - (C) 1 2 3 - (D) none of the mentioned
詳解: 程式碼在i + = 1這行有語法錯誤。正確的寫法應該是i += 1(中間不能有空格)。
如果修正為i += 1,程式會輸出:
1
2
因為當i=3時,i % 3 == 0條件成立,執行break跳出迴圈。
7 第6題 (4分) - Java命令用途
題目: java命令的用途是什麼?
選項: - (A) Compile a java program - (B) Execute a java program ✓ - (C) Interpret a java program - (D) Debug a java program
詳解: Java開發中的兩個主要命令: - javac: 編譯Java程式(.java → .class) - java: 執行編譯後的Java程式(.class)
所以java命令是用來執行Java程式的。
8 第7題 (4分) - Java while迴圈
題目: 以下Java程式碼的輸出為何?
int m = 2000;
int k = 0;
while (-- m > ++k);
System.out.println(m);選項: - (A) Error - (B) 1000 ✓ - (C) 2000 - (D) 0
詳解: 這個迴圈會持續執行直到--m不大於++k: - 每次迴圈:m先減1,k先加1,然後比較 - 當m = k = 1000時,--m變成999,++k變成1001 - 此時999 > 1001為false,迴圈結束 - 最後m的值為999…等等,讓我重新計算
實際執行過程: - 初始: m=2000, k=0 - 迴圈持續到--m <= ++k - m每次減1,k每次加1,相當於每次迭代差距縮小2 - 當m=1000, k=1000時停止 - 但因為是--m > ++k,所以m先變999,k先變1001 - 條件不成立,迴圈結束,此時m=999
等等,應該更仔細分析。當while條件不成立時m的值: - 最後一次執行前:m=1001, k=999 - 執行--m後m=1000,執行++k後k=1000 - 條件1000 > 1000為false,迴圈結束 - 最終m=1000
9 第8題 (4分) - Java while語法錯誤
題目: 以下Java程式碼片段中哪個陳述是正確的?
public class While
{
public void loop()
{
int x = 0;
while (1) // 第6行
{
System.out.println("x plus one is" + (x + 1));
}
}
}選項: - (A) There is syntax error in line no. 1 - (B) There is syntax error in line no. 8 - (C) There is syntax error in line no. 6 ✓ - (D) There are syntax errors in line nos. 1 & 6
詳解: 在Java中,while迴圈的條件必須是boolean型別的表達式。不像C語言可以使用整數(0為false,非0為true),Java不允許while(1)這種寫法。
正確寫法:
while (true) // 或 while (x < 10) 等boolean表達式10 第9題 (4分) - Java字串建立方式
題目: 以下哪種方法可以在Java中建立字串? - I: String S = "Hello Java"; - II: String S2 = new String ("Hello"+' '+"Java");
選項: - (A) Only I - (B) Only II - (C) Both I and II ✓ - (D) Neither I nor II
詳解: Java中有兩種建立String的方式:
字串字面值(String Literal):
String S = "Hello Java";這種方式會將字串存儲在String Pool中。
使用new關鍵字:
String S2 = new String("Hello" + ' ' + "Java");這會在heap中創建新的String物件。注意
' '是char型別,會被自動轉換。
兩種方式都是正確的。
11 第10題 (4分) - Java類別繼承
題目: 所有Java類別的父類別是_____?
選項: - (A) Java.lang.object ✓ - (B) Java.lang.class - (C) Java.lang.system - (D) Java.util.object
詳解: 在Java中,java.lang.Object是所有類別的根類別。即使你沒有明確使用extends關鍵字,每個類別都隱式地繼承自Object類別。
Object類別提供的基本方法包括: - toString() - equals() - hashCode() - getClass() - clone() 等等。
注意: 正確寫法應該是java.lang.Object(大寫O)。
12 第11題 (4分) - Java變數命名規則
題目: 以下哪個Java變數宣告規則是正確的?
選項: - (A) Java keywords can be used as variable names - (B) Variable names are case-insensitive - (C) The first character must be a letter ✓ - (D) All of the options
詳解: Java變數命名規則: 1. ✓ 第一個字元必須是字母(a-z, A-Z)、底線(_)或美元符號($) 2. ✗ 不能使用Java關鍵字(如int, class, public等) 3. ✓ 變數名稱區分大小寫(myVar和MyVar是不同的變數) 4. ✓ 後續字元可以是字母、數字、底線或美元符號
所以選項C是最接近正確的,雖然更精確的說法應該是”第一個字元必須是字母、底線或美元符號”。
13 第12題 (4分) - Java陣列傳遞
題目: 以下Java程式的輸出為何?
class simple {
public static void main(String[] args) {
simple obj = new simple();
obj.start( );
}
void start( ) {
long[] P= {3, 5, 7};
long[] Q= method(P);
System.out.print(P[0] + P[1] + P[2]+":");
System.out.print(Q[0] + Q[1] + Q[2]);
}
long[] method (long[] R) {
R[2]=4;
return R;
}
}選項: - (A) 15:15 - (B) 15:12 - (C) 12:15 - (D) 12:12 ✓
詳解: 這題考察Java中陣列的傳遞方式。在Java中,陣列是傳址呼叫(pass by reference):
P陣列創建時為{3, 5, 7}- 呼叫
method(P)時,將P的參考傳給R R[2]=4實際上修改了原始陣列,所以P[2]也變成4- Q和P指向同一個陣列
- 因此:
P[0] + P[1] + P[2]= 3 + 5 + 4 = 12Q[0] + Q[1] + Q[2]= 3 + 5 + 4 = 12
- 輸出:
12:12
14 第13題 (4分) - Java基本型別
題目: 以下哪個不是Java的基本型別(primitive type)?
選項: - (A) short - (B) long - (C) long double ✓ - (D) boolean
詳解: Java沒有long double這種型別。這可能是從C/C++的概念混淆過來的。
Java的數值基本型別: - 整數: byte, short, int, long - 浮點數: float, double
如果需要更高精度的浮點運算,Java提供java.math.BigDecimal類別。
15 第14題 (4分) - Java垃圾回收
題目: 在Java中,垃圾回收(garbage collection)是什麼?
選項: - (A) The operating system periodically deletes all of the Java files available on the system. - (B) The java virtual machine (JVM) checks the output of any java program and deleted anything that does not make sense at all. - (C) Any java package imported in a program and not being used, is automatically deleted. - (D) When all references to an object are gone, then the memory used by the object is automatically reclaimed. ✓
詳解: 垃圾回收(Garbage Collection, GC)是Java的自動記憶體管理機制:
- 當一個物件不再被任何參考指向時(無法再被程式存取)
- JVM的垃圾回收器會自動回收該物件占用的記憶體
- 這避免了記憶體洩漏(memory leak)的問題
- 程式設計師不需要手動釋放記憶體(不像C/C++需要delete/free)
範例:
String s = new String("Hello"); // 建立物件
s = null; // 移除參考,原物件變成垃圾,等待回收16 第15題 (4分) - 執行時期錯誤
題目: 在程式執行時期發生的錯誤稱為:
選項: - (A) Interrupt - (B) Exception ✓ - (C) Fault - (D) Bug
詳解: 程式錯誤的分類:
- 編譯錯誤(Compile-time Error): 語法錯誤,程式無法編譯
- 執行時期錯誤(Run-time Error): 在Java中稱為Exception(例外)
- 例如:
NullPointerException,ArrayIndexOutOfBoundsException
- 例如:
- 邏輯錯誤(Logical Error): 程式能執行但結果不正確
Java提供完整的例外處理機制:
try {
// 可能拋出例外的程式碼
} catch (Exception e) {
// 處理例外
}17 第16題 (4分) - Python匿名函數
題目: Python支援在執行時期建立匿名函數,使用的結構稱為_____?
選項: - (A) lambda ✓ - (B) regular expression - (C) anonymous - (D) map/reduce
詳解: Python的lambda表達式用於建立匿名函數(不需要def定義的簡短函數):
語法:
lambda 參數: 表達式範例:
# 傳統函數
def add(x, y):
return x + y
# lambda函數
add = lambda x, y: x + y
# 常見用法:配合map, filter, sorted等
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16]18 第17題 (4分) - Python串列方法錯誤
題目: 以下程式的輸出為何?
nameList = ['Harsh', 'Pratik', 'Bob', 'Dhruv']
pos = nameList.index("Toy")
print (pos * 3)選項: - (A) ValueError: ‘Toy’ is not in list ✓ - (B) Toy Toy Toy - (C) Harsh Harsh Harsh - (D) none of the mentioned
詳解: list.index(value)方法會: - 如果找到value,回傳其索引位置 - 如果找不到,拋出ValueError例外
因為’Toy’不在nameList中,所以會引發錯誤。
正確用法:
# 方法1: 先檢查是否存在
if "Toy" in nameList:
pos = nameList.index("Toy")
# 方法2: 使用try-except
try:
pos = nameList.index("Toy")
except ValueError:
print("找不到")19 第18題 (4分) - Python列表生成式
題目: 以下Python程式的輸出為何?
a = 'Taiwan 1025 for 114280 Uscitms'
b = [x for x in (int(x) for x in a if x.isdigit()) if x%2 == 0]
print(b)選項: - (A) Runtime error - (B) Compilation error - (C) [0, 2, 4, 2, 8, 0] ✓ - (D) [‘0’, ‘2’, ‘4’, ‘2’, ‘8’, ‘0’]
詳解: 這是一個巢狀的生成式表達式:
執行過程: 1. x.isdigit(): 從字串a中篩選出數字字元: ‘1’,‘0’,‘2’,‘5’,‘1’,‘1’,‘4’,‘2’,‘8’,‘0’ 2. int(x): 轉換為整數: 1, 0, 2, 5, 1, 1, 4, 2, 8, 0 3. if x%2 == 0: 篩選偶數: 0, 2, 4, 2, 8, 0 4. 結果: [0, 2, 4, 2, 8, 0]
注意: - 外層生成式將整數收集成串列 - ’5’被過濾掉因為5%2≠0 - 數字可以重複出現
20 第19題 (4分) - Python集合類型
題目: 在Python中,哪個集合是有序的、可變的、並且允許重複成員?
選項: - (A) Dictionary - (B) Set - (C) Tuple - (D) List ✓
詳解: Python的四種主要集合類型比較:
| 類型 | 有序 | 可變 | 允許重複 | 語法 |
|---|---|---|---|---|
| List | ✓ | ✓ | ✓ | [1, 2, 3] |
| Tuple | ✓ | ✗ | ✓ | (1, 2, 3) |
| Set | ✗ | ✓ | ✗ | {1, 2, 3} |
| Dictionary | ✓(3.7+) | ✓ | 鍵不可重複 | {'a': 1} |
只有List滿足所有三個條件:有序、可變、允許重複。
21 第20題 (4分) - Python類別初始化
題目: 以下Python程式碼的輸出為何?
class Year:
def __init__(self, id):
self.id = str(id)
id="2025"
year = Year(114)
print(year.id)選項: - (A) 2025 - (B) 114 ✓ - (C) Syntax error - (D) Runtime Error
詳解: 執行過程: 1. year = Year(114): 建立Year物件,傳入114 2. 在__init__中: - self.id = str(id): 將114轉為字串”114”並賦值給物件屬性 - id = "2025": 這只是修改區域變數id,不影響self.id 3. print(year.id): 輸出”114”
重點: - self.id是物件的屬性 - id是參數/區域變數 - 修改區域變數不會影響已經賦值的物件屬性
22 第21題 (4分) - Python集合操作
題目: 以下Python程式的輸出為何?
z=set('toytoy')
z.add('toy')
z.update(set(['usc', 'itm']))
print(z)選項: - (A) {‘toy’, [‘itm’, ‘usc’]} - (B) {‘toy’, ‘usc’, ‘itm’} - (C) {‘m’, ‘o’, ‘t’, ‘u’, ‘i’, ‘y’, ‘s’, ‘c’} - (D) {‘toy’, ‘usc’, ‘y’, ‘o’, ‘t’, ‘itm’} ✓
詳解: 執行過程: 1. set('toytoy'): 將字串轉為集合,重複字元只保留一次 - 結果: {'t', 'o', 'y'} 2. z.add('toy'): 加入字串’toy’(整個字串作為一個元素) - 結果: {'t', 'o', 'y', 'toy'} 3. z.update(set(['usc', 'itm'])): 加入兩個字串元素 - 結果: {'t', 'o', 'y', 'toy', 'usc', 'itm'}
注意: - set('string')會將字串拆成單個字元 - add()加入單一元素 - update()加入多個元素
輸出順序可能不同(集合是無序的),但元素相同。
23 第22題 (4分) - Python集合運算
題目: 以下Python程式的輸出為何?
a = [1,2,4,7,8,9]
b = [0,2,3,6,8,9]
c = [0,4,5,6,7,8]
xor = []
xor.extend(i for i in a if i not in (b+c) and i not in xor)
xor.extend(i for i in b if i not in (a+c) and i not in xor)
xor.extend(i for i in c if i not in (a+b) and i not in xor)
print(xor)選項: - (A) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - (B) [0, 2, 4, 6, 8] - (C) [1, 3, 5] ✓ - (D) [0, 9]
詳解: 這個程式在找三個串列的對稱差集(只出現在一個串列中的元素):
分析各個元素: - 0: 在b和c中,不在a中 → 不符合(出現2次) - 1: 只在a中 → ✓ - 2: 在a和b中 → 不符合 - 3: 只在b中 → ✓ - 4: 在a和c中 → 不符合 - 5: 只在c中 → ✓ - 6: 在b和c中 → 不符合 - 7: 在a和c中 → 不符合 - 8: 在a, b, c中 → 不符合 - 9: 在a和b中 → 不符合
結果: [1, 3, 5]
這相當於找三個集合的XOR運算結果。
24 第23題 (4分) - Java物件導向概念 [複選題]
題目: 以下哪些是Java的物件導向程式設計(OOP)概念?
選項: - (A) Polymorphism (多型) ✓ - (B) Encapsulation (封裝) ✓ - (C) Inheritance (繼承) ✓ - (D) Abstraction (抽象) ✓
詳解: Java的四大OOP核心概念:
- 封裝(Encapsulation):
- 將資料和方法包裝在類別中
- 使用private/public等存取修飾詞控制存取權限
private int age; public int getAge() { return age; } - 繼承(Inheritance):
- 子類別繼承父類別的屬性和方法
class Dog extends Animal { } - 多型(Polymorphism):
- 同一介面,不同實作
- 方法覆寫(Override)和多載(Overload)
Animal a = new Dog(); // 向上轉型 - 抽象(Abstraction):
- 隱藏實作細節,只顯示必要功能
- 使用abstract class或interface
abstract class Shape { abstract void draw(); }
所有選項都正確。
25 第24題 (4分) - Python例外處理
題目: 以下Python程式碼的輸出為何?
def a():
try:
f(x)
except:
printf("Except?")
print("Last!")
a()選項: - (A) Except?
Last! - (B) Except? - (C) Last! - (D) NameError: name ‘f’ is not defined
NameError: name ‘printf’ is not defined. Did you mean: ‘print’?
(During handling of the above exception, another exception occurred) ✓
詳解: 執行過程: 1. 進入try區塊,執行f(x) 2. f未定義,拋出NameError 3. 進入except區塊,執行printf("Except?") 4. printf未定義(應該是print),拋出另一個NameError 5. 因為在例外處理過程中又發生例外,所以會顯示兩個錯誤
重點: - Python沒有printf函數(C語言才有) - 在except區塊中發生的例外不會被捕捉 - Python 3.10+會提示”Did you mean: ‘print’?”
正確寫法:
def a():
try:
f(x)
except NameError:
print("Except?")
print("Last!")26 第25題 (4分) - Python數字累加 [複選題]
題目: 如何在Python中將1到10的數字相加?
選項: - (A) sum(x for x in range(11)) ✓ - (B) sum(range(1,11,1)) ✓ - (C) reduce(lambda x,y:x+y, range(11)) ✓ - (D) sum(x for x in range(10,0,-1)) ✓
詳解: 分析各選項:
(A) sum(x for x in range(11)) ✓ - range(11) → 0,1,2,…,10 - sum = 0+1+2+…+10 = 55 ✓
(B) sum(range(1,11,1)) ✓ - range(1,11,1) → 1,2,3,…,10 - sum = 1+2+…+10 = 55 ✓
(C) reduce(lambda x,y:x+y, range(11)) ✓ - 需要 from functools import reduce - range(11) → 0,1,2,…,10 - reduce累加 = 55 ✓
(D) sum(x for x in range(10,0,-1)) ✓ - range(10,0,-1) → 10,9,8,…,1 - sum = 10+9+…+1 = 55 ✓
所有選項都正確! 雖然(A)和(C)包含0,但0不影響總和。
27 總結
考試成績: 0/100
知識點涵蓋: - Java: 基本型別、字串、陣列、OOP概念、例外處理、垃圾回收 - Python: 資料結構(List/Set/Dict/Tuple)、生成式、Lambda函數、例外處理、類別
建議複習重點: 1. Java和Python的基本資料型別差異 2. Python的縮排規則和語法特性 3. Java的物件導向四大特性 4. Python的集合操作和生成式表達式 5. 兩種語言的例外處理機制