问答题 【说明】
类Queue表示队列,类中的方法如下表所示。
isEmpty() 判断队列是否为空。如果队列不为空,返回true;否则,返回false
enqueue(Object newNode) 入队操作
dequeue() 出队操作。如果队列为空,则抛出异常
类Node表示队列中的元素;类EmptyQueueException给出了队列操作中的异常处理操作。
public class TestMain { //主类
public static viod main (String args[]){
Queue q=new Queue();
q.enqueue("first!");
q.enqueue("second!");
q.enqueue("third!");
{{U}} (1) {{/U}}{
while(true)
System.out.println(q.dequeue());
}
catch({{U}} (2) {{/U}}){ }
}
public class Queue { //队列
Node m_FirstNode;
public Queue(){m_FirstNode=null;}
public boolean isEmpty(){
if(m_FirstNode==null)return true;
else return false;
}
public viod enqueue(Object newNode) { //入队操作
Node next=m_FirstNode;
if(next==null)m_FirstNode=new Node(newNode);
else{
while(next.getNext()!=null)next=next.getNext();
next.setNext(new node(newNode));
}
}
public Object dequeue(){{U}} (3) {{/U}}{ //出队操作
Object node;
if (isEempty())
{{U}} (4) {{/U}}; //队列为空, 抛出异常
else{
node=m_FirstNode.getObject();
m_FirstNode=m_FirstNode.getNext();
return node;
}
}
}
public class Node{ //队列中的元素
Object m_Data;
Node m_Next;
public Node(Object data) {m_Data=data; m_Next=null;}
public Node(Object data, Node next) {m_Data=data; m_Next=-next;}
public void setObject(Object data) {m_Data=data;}
public Object getObject(Object data) {return m_data;}
public void setNext(Node next) {m_Next=next;}
public Node getNext() {return m_Next;}
}
public class EmptyQueueException extends{{U}} (5) {{/U}}{ //异常处理类
public EmptyQueueException() {
System.out.println("队列已空! ");
}
}
【正确答案】
【答案解析】[解析] (1)try 从紧随其后的catch可以断定这是异常处理的try-catch结构。 (2)Exception e或者EmptyQueueException e 其中e是对象名,可用任意合法标识符替换,这是catch要捕获的信息。 (3)throw EmptyQueueException 当队列为空时,抛出错误信息EmptyQueueException。 (4)throw(new EmptyQueueException()) 当队列为空时,抛出异常。动态生成EmptyQueueException对象,出错处理。 (5)Exception EmptyQueueException对象是从异常处理类Exception扩展而来。