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

时间:2014-05-11 06:31:30

标签: java exception exception-handling stack

我正在尝试编写一个程序来检查使用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 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();

}

}

这是我的匹配课程。

public class Matching{
    ArrayStack match_Stack=new ArrayStack();
    Object popped;
    Object[] array_match={"{","}"};
    public boolean matching() {
        for(int i=0;i< array_match.length;i++){
            if (array_match[i]=="{" || array_match[i]=="[" ||array_match[i]=="(" )
                match_Stack.push(array_match[i]);
             if(array_match[i]=="}" || array_match[i]=="]" || array_match[i]==")"){
                if (match_Stack.isEmpty())
                    return false;
                if  (match_Stack.topAndpop()==array_match[i]);
                    return true;
            }

        }   
    if (match_Stack.isEmpty())
        return true;
    else 
        return false;
    }
    public static void main (String args[]) throws EmptyStackException,OverFlowException {
    }

}  

这是EmptyStackException类:

public class EmptyStackException extends Exception{
        public EmptyStackException(){
            super();
        }
        public EmptyStackException(String s){
            super(s);

        }
        public void print(){
            System.out.println("OverFlow");
        }
}

但问题是当我编译匹配时,我得到一个错误,因为未报告的异常EmptyStackException。必须被捕获或声明被抛出。 我认为问题是我不了解的例外情况。我在这里呆了好几天,因为这个例外问题,我无法研究其余的数据结构。所以任何有关我如何解决这个问题以及运行它的帮助都会非常有帮助。

1 个答案:

答案 0 :(得分:2)

你真的应该阅读关于异常的tutorial并完全解决它。通过这种方式,您可以更好地理解异常。

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

您的matching方法不处理该异常。 异常必须被捕获或抛出。这是编译器告诉你的。因此,对于第一个传递,将方法声明为

public boolean matching() throws EmptyStackException