高考申論題
108年
[資訊處理] 程式語言
第 ⑴ 題
📖 題組:
下列為資料結構 List 的 Java 程式,而 ListTest 為測試類別(class),試回答以下問題:(35 分) class ListNode
{
T data;
ListNode nextNode;
ListNode(T object)
{
this(object, null);
}
ListNode(T object, ListNode node)
{
data = object;
nextNode = node;
}
T getData() { return data; } // 補全程式意涵
ListNode getNext() { return nextNode; } // 補全程式意涵
}
public class List
{
private ListNode firstNode;
private ListNode lastNode;
private String name;
public List()
{
this("list");
}
public List(String listName)
{
name = listName;
firstNode = lastNode = null;
}
public void insertAtFront(T insertItem)
{
if (isEmpty()) firstNode = lastNode = new ListNode(insertItem);
else firstNode = new ListNode(insertItem, firstNode);
}
public void insertAtBack(T insertItem) { /* 略 */ }
public T removeFromFront() throws EmptyListException
{
if (isEmpty()) throw new EmptyListException(name);
T removedItem = firstNode.data;
if (firstNode == lastNode) firstNode = lastNode = null;
else firstNode = firstNode.nextNode;
return removedItem;
}
public T removeFromBack() throws EmptyListException { /* 待撰寫 */ }
public boolean isEmpty() { return firstNode == null; }
public void print()
{
if (isEmpty())
{
System.out.printf("Empty %s%n", name);
return;
}
System.out.printf("The %s is: ", name);
ListNode current = firstNode;
while (current != null)
{
System.out.printf("%s ", current.data);
current = current.nextNode;
}
System.out.println();
}
}
public class EmptyListException extends RuntimeException
{
public EmptyListException() { this("List"); }
public EmptyListException(String name) { super(name + " is empty"); }
}
public class ListTest
{
public static void main(String[] args)
{
List list = new List<>();
try
{
list.insertAtFront(-1);
list.insertAtFront(99);
list.print();
int removedItem = list.removeFromFront();
removedItem = list.removeFromFront();
list.print();
removedItem = list.removeFromFront();
list.print();
}
catch (EmptyListException emptyListException)
{
emptyListException.printStackTrace();
}
}
}
下列為資料結構 List 的 Java 程式,而 ListTest 為測試類別(class),試回答以下問題:(35 分) class ListNode
ListTest 中”List list = new List<>();”會先後呼叫那些 methods?傳送那些參數值?結果新物件 list 的屬性值為何?
📝 此題為申論題
思路引導 VIP
- 追蹤建構子調用:這考的是 Constructor Chaining(建構子連鎖)。看到
new List<>(),先找無參數建構子,再看它裡面呼叫了什麼。 - 屬性初始化:觀察最後被呼叫的建構子如何給成員變數賦值(
name,firstNode,lastNode)。
🤖
AI 詳解
AI 專屬家教
【考點分析】 本題考察 Java 建構子連鎖(Constructor Chaining)機制以及物件屬性初始化的過程。 【理論/法規依據】
▼ 還有更多解析內容