114-1 Java/Python 測驗題目詳解

作者

Allen

發佈於

2025年10月23日

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的方式:

  1. 字串字面值(String Literal):

    String S = "Hello Java";

    這種方式會將字串存儲在String Pool中。

  2. 使用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):

  1. P陣列創建時為{3, 5, 7}
  2. 呼叫method(P)時,將P的參考傳給R
  3. R[2]=4實際上修改了原始陣列,所以P[2]也變成4
  4. Q和P指向同一個陣列
  5. 因此:
    • P[0] + P[1] + P[2] = 3 + 5 + 4 = 12
    • Q[0] + Q[1] + Q[2] = 3 + 5 + 4 = 12
  6. 輸出: 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的自動記憶體管理機制:

  1. 當一個物件不再被任何參考指向時(無法再被程式存取)
  2. JVM的垃圾回收器會自動回收該物件占用的記憶體
  3. 這避免了記憶體洩漏(memory leak)的問題
  4. 程式設計師不需要手動釋放記憶體(不像C/C++需要delete/free)

範例:

String s = new String("Hello");  // 建立物件
s = null;  // 移除參考,原物件變成垃圾,等待回收

16 第15題 (4分) - 執行時期錯誤

題目: 在程式執行時期發生的錯誤稱為:

選項: - (A) Interrupt - (B) Exception ✓ - (C) Fault - (D) Bug

詳解: 程式錯誤的分類:

  1. 編譯錯誤(Compile-time Error): 語法錯誤,程式無法編譯
  2. 執行時期錯誤(Run-time Error): 在Java中稱為Exception(例外)
    • 例如: NullPointerException, ArrayIndexOutOfBoundsException
  3. 邏輯錯誤(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核心概念:

  1. 封裝(Encapsulation):
    • 將資料和方法包裝在類別中
    • 使用private/public等存取修飾詞控制存取權限
    private int age;
    public int getAge() { return age; }
  2. 繼承(Inheritance):
    • 子類別繼承父類別的屬性和方法
    class Dog extends Animal { }
  3. 多型(Polymorphism):
    • 同一介面,不同實作
    • 方法覆寫(Override)和多載(Overload)
    Animal a = new Dog();  // 向上轉型
  4. 抽象(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. 兩種語言的例外處理機制