在java中使用堆栈匹配括号中的异常处理
我正在尝试编写一个程序,用堆栈检查括号是否匹配。这是我的ArrayStack类在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
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