即使使用了return语句,也会丢失return语句错误

时间:2013-12-05 16:06:02

标签: java exception-handling stack

我开始在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中编写弹出部分。

2 个答案:

答案 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区块内返回。