我开始在Java中学习用户定义的异常。我已经创建了一个简单的堆栈程序来实现我自己的Stack溢出和Stack下溢异常。一切都很好,但即使我已经返回一个值,我也会在pop块中收到“缺少返回语句错误”。
代码:
import java.io.*;
class StackFullException extends Exception
{
private int a;
StackFullException(int x)
{
a=x;
}
public String toString()
{
return "Stack Overflow";
}
}
class StackEmptyException extends Exception
{
private int a;
StackEmptyException(int x)
{
a=x;
}
public String toString()
{
return "Stack underflow";
}
}
class Stack
{
int n=5;
int top=-1;
int st[]=new int[10];
void push(int val)
{
try
{
if(top==n-1)
{
throw new StackFullException(top);
}
else
{
top++;
st[top]=val;
}
}
catch(StackFullException e)
{
System.out.print("\n"+e);
}
}
int pop()
{
try
{
if(top==-1)
throw new StackEmptyException(top);
else
{
int tmp;
tmp=st[top];
top--;
return tmp;
}
}
catch(StackEmptyException e)
{
System.out.print("\n"+e);
}
}
}
class StackDemo
{
public static void main(String args[])throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int item;
Stack s=new Stack();
System.out.print("\nEnter the elements :");
for(int i=0;i<7;i++)
{
item=Integer.parseInt(br.readLine());
s.push(item);
}
}
}
注意:我还没有在main中编写弹出部分。
答案 0 :(得分:1)
在if
catch
条件中,没有return
catch(StackEmptyException e)
{
System.out.print("\n"+e);
//Should be a return here
}
或者不抓住它,只是扔掉它
int pop() throws StackEmptyException
答案 1 :(得分:0)
您需要在catch
区块内返回。