2

我正在为 Java 数据结构类做作业,我们必须使用链表实现从堆栈 ADT 构建一个程序。教授要求我们包含一个名为 popTop() 的方法,该方法弹出堆栈的顶部元素,如果堆栈为空,则抛出“StackUnderflowException”。据我所知,这是一个我们必须自己编写的异常类,我遇到了一些问题。如果有人可以帮助我,我将非常感激。这是我的一些代码:

private class StackUnderflowException extends RuntimeException {

    public StackUnderflowException() {
        super("Cannot pop the top, stack is empty");
    }
    public StackUnderflowException(String message) {
        super(message);
    }
}

那是我写的异常类,这里是我迄今为止写的 popTop() 方法的开始:

public T popTop() throws StackUnderflowException {
    if (sz <= 0) {
        throw new StackUnderflowException();
    }
}

我收到错误提示 StackUnderflowException 不能是 RuntimeException 的子类,有人可以对此有所了解吗?在方法中,我收到错误说 StackUnderflowException 未定义。

4

2 回答 2

4

你的构造函数是私有的,你应该扩展Exception,而不是RuntimeException

于 2012-10-26T02:19:35.557 回答
0

您的代码有 2 个问题 1.您的自定义 Exception 类是私有的 2.它扩展了运行时异常,它应该在超类 Exception 中进行扩展

您可以创建自定义异常,如下所示:

公共类 StackUnderflowException 扩展异常{

private static final long serialVersionUID = 1L;

/**
 * Default constructor.
 */
public StackUnderflowException(){

}
/**
 * The constructor wraps the exception thrown in a method.
 * @param e the exception instance.
 */
public StackUnderflowException( Throwable e) 
{
    super(e);
}
/**
 * The constructor wraps the exception and the message thrown in a method.
 * @param msg the exception instance.
 * @param e the exception message.
 */
public StackUnderflowException(String msg, Throwable e) 
{
    super(msg, e);

}

/**
 * The constructor initializes the exception message.
 * @param msg the exception message 
 */
public StackUnderflowException(String msg) 
{
    super(msg);
}
于 2012-10-26T07:16:20.640 回答