2013-11-03 37 views
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; 
} 
} 

測試這些代碼,我寫了一個包含主要的另一個類():

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」

我已經檢查這個程序幾次,但我真的不明白是什麼問題

任何人都可以請幫助我? 感謝您的關注提前

+2

你的程序不能編譯,更不用說運行了。 –

+0

@MarkoTopolnik這是最大的謎語之一:爲什麼newbees認爲他們可以騙我們? – Ingo

+0

@Ingo讓我們不要這麼苛刻,給予一個懷疑的好處:) –

回答

1

從類中刪除聲明myStackabstract關鍵詞和主做如下:

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:

Stack界面和myStack類添加throws EmptyStackExceptiontop()。同樣也就是throws EmptyStackException對於pop()功能myStack類不在接口中,它已經在那裏了。

+0

@MarkoTopolnik爲什麼它是不完整的實現,我看到它正在實現界面中的所有定義的方法。我想念這裏的東西嗎? – Trying

+0

對不起,沒有向下滾動。仍然習慣了新的「酷」GUI,它不顯示滾動條,直到您嘗試滾動... –

+0

@MarkoTopolnik好的。沒有問題 :)。 – Trying

相關問題