在java中使用堆栈匹配括号中的异常处理

在java中使用堆栈匹配括号中的异常处理,java,exception,exception-handling,stack,Java,Exception,Exception Handling,Stack,我正在尝试编写一个程序,用堆栈检查括号是否匹配。这是我的ArrayStack类 public class ArrayStack{ private final int DEFAULT_SIZE=10; public int tos; Object[] array; public ArrayStack(){ array =new Object[DEFAULT_SIZE]; tos=-1; } public

我正在尝试编写一个程序,用堆栈检查括号是否匹配。这是我的ArrayStack类

public class ArrayStack{ 
    private final int DEFAULT_SIZE=10;
    public int tos;
    Object[] array;
    public ArrayStack(){
        array   =new Object[DEFAULT_SIZE];
            tos=-1;
    }
    public void push(Object e)throws OverFlowException{
        if (isFull()){
            throw new OverFlowException("OverFlow");
        }
        else{
            array[tos+1]=e;
            tos++;
        }
    }
    public Object topAndpop() throws EmptyStackException{
    Object returnPop;
        if (isEmpty())
            throw new EmptyStackException("Stack empty");
        else{ 
            returnPop=top();
            pop();
            }
        return returnPop;
    }   
    public void pop() throws EmptyStackException{
        if (isEmpty())
            throw new EmptyStackException("Stack empty");
        else
            tos--;
    }
    public Object top() throws EmptyStackException{
        if (isEmpty())
            throw new EmptyStackException("Stack empty");
        else
            return array[tos];
    }

    public boolean isEmpty(){
        return tos==-1;
    }


    public boolean isFull(){
        if(tos==array.length)
            return true;
        else
            return false;
    }
    public void makeEmpty() throws EmptyStackException{

        while (tos>=0){
            if (isEmpty())
                throw new EmptyStackException("Stack empty");
            else
                pop();
        }
    }
    public void print(){
        for (int i=0;i<=tos;i++){
            System.out.println(array[i]);
        }
    }

public static void main (String args[]) throws EmptyStackException,OverFlowException {
    ArrayStack newStack=new ArrayStack();
    newStack.push("S");

    newStack.push("apple");
    newStack.push("D");
    newStack.topAndpop();
    newStack.push("P");

    newStack.print();

}

}
但问题是,当我编译匹配时,我得到一个错误,即未报告的异常EmptyStackException。必须捕获或声明要抛出。 我认为问题在于我不太了解的异常。我被困在这里好几天了,因为这个异常问题,我无法研究其余的数据结构。因此,关于如何修复此问题并运行此程序的任何帮助都将非常有用。

您真的应该阅读一篇关于异常的文章,并完整地完成它。这样,您将更好地理解异常

您的问题在于方法
Matching.Matching()
。您正在方法的实现中使用方法
ArrayStack.push(Object)
ArrayStack.topAndpop()
。但是这些方法被声明为(可能)抛出
EmptyStackException

您的
匹配方法不处理该异常。必须捕获或抛出异常。这就是编译器告诉您的。因此,对于第一次使用,请将该方法声明为

public boolean matching() throws EmptyStackException

那么,在谷歌上搜索“Java教程例外”并阅读您得到的结果如何?那么你应该能够解决你的问题。EmptyStackException是否为选中异常?那么,是否必须通过使用
throws
关键字抛出它的方法来声明它?您是否在matching()方法中执行此操作?重新阅读我认为,因为异常发生在push()和topAndpop()方法中,并且我已经抛出了它们,所以我不必在匹配类中执行任何操作。其次,您应该了解已检查异常和未检查异常(以及错误)之间的区别。第三,您必须了解当代码块声明抛出异常(实际上可能不会抛出)时该怎么做。真的,请阅读教程。虽然我读了这篇文章,但我不清楚异常是如何工作的。我必须再读一遍。谢谢你的回答
public class EmptyStackException extends Exception{
        public EmptyStackException(){
            super();
        }
        public EmptyStackException(String s){
            super(s);

        }
        public void print(){
            System.out.println("OverFlow");
        }
}
public boolean matching() throws EmptyStackException