2

我正在尝试编写一个简单的程序来在其中使用堆栈我已经编写了一个定义方法的类:

    public interface Stack<E>{
         public int size();

        public boolean isEmpty();

       public E top();

      public void push(E element);
      public E pop()throws EmptyStackException;
  }

和另一个实现堆栈的类:

    public abstract class myStack<E> implements Stack<E>{

private final E s[];
int t=0;

public myStack() {
    this.s = (E[]) new Object[100];
}


@Override
public int size(){
    return t;
}


@Override
public boolean isEmpty(){
    switch(size()){
        case 0:
            return true;
    }
    return false;
}


@Override
public E top() {
    if(isEmpty())
        throw new EmptyStackException();
    return s[t-1];
}

@Override
public void push(E element) {
    if(isEmpty())
        s[0]= element;
    else
        s[t]= element;
    t++;
}


@Override
public E pop() {
            E x;
    if(isEmpty())
        throw new EmptyStackException();
    else{
        x = s[t-1];
        s[t-1] = null;
        t--;
    }
    return x;
}
}

为了测试这些代码,我编写了另一个包含 main() 的类:

   public static void main(String[] args) {
    // TODO code application logic here

    Stack<Integer> s;
    s.push(1);
    s.push(2);
    System.out.println(s.pop());
}

但是当我运行程序时,它给了我这个错误“线程“主”java.lang.RuntimeException中的异常”

我已经检查了这个程序好几次,但我真的不明白是什么问题

谁能帮帮我吗??提前感谢您的关注

4

1 回答 1

1

从类声明中删除abstract关键字myStack并在 main 中执行以下操作:

public static void main(String[] args) {
    // TODO code application logic here

    Stack<Integer> s=new myStack<Integer>();
    s.push(1);
    s.push(2);
    System.out.println(s.pop());
}

现在应该是编译时错误说“ Variable is not initialized”。

EDIT:

添加throws EmptyStackException到接口和类top()中。同样 ,对于不在接口中的类中的函数,它已经存在。StackmyStackthrows EmptyStackExceptionpop()myStack

于 2013-11-03T18:35:29.407 回答