سؤال

I am trying to write a program that checks for parentheses matching using stacks.This is my ArrayStack class.

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();

}

}

And this is my matching class.

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 {
    }

}  

This is EmptyStackException class :

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

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

But the problem is when I compile matching I get an error as unreported exception EmptyStackException.must be caught or declared to be thrown. I think the problem is with exceptions which I don't have a good knowledge of.I am stuck here for days and because of this exception issue I am unable to study the rest of data structures. So any help on how I can fix this and run this would be greatly helpful.

هل كانت مفيدة؟

المحلول

You really should read a tutorial about exceptions and work it through completely. This way you will get a better understanding of exceptions.

Your problem is the method Matching.matching(). You are using the methods ArrayStack.push(Object) and ArrayStack.topAndpop() in the method's implementation. But these methods are declared to (potentially) throw an EmptyStackException.

Your matching method does not deal with that exception. The exception must be either caught or thrown. This is what the compiler does tell you. So for a first coming-through declare the method as

public boolean matching() throws EmptyStackException
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top