2

私はJavaDataStructuresクラスの宿題の割り当てに取り組んでおり、リンクリストの実装を使用してスタックADTからプログラムを構築する必要があります。教授は、スタックの最上位要素をポップし、スタックが空の場合に「StackUnderflowException」をスローするpopTop()というメソッドを含めるように要求しました。私が収集できることから、これは私たちが自分で作成しなければならない例外クラスであり、私はそれにいくつかの問題を抱えています。誰かが私を助けてくれるなら、私は非常に感謝しています。これが私のコードの一部です:

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はException{を拡張します

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 に答える