2014-10-09 24 views
0

我正在學習堆棧。我試圖寫我的代碼爲pop()當我遇到了Java不允許「從null轉換爲int」時...如何從使用數組構建的堆棧中移除元素?

如何從數組中刪除元素?即使我將空字符型轉換爲整數,它也會拋出一個空指針異常。

我在網上看到的大多數其他教程只是改變堆棧的頂部,而對索引處的值沒有做任何事情。

檢查以下

static class Stack{ 

     int[] holder; 
     int capacity; 
     int top; 

     //Constructor 
     Stack(int a){ 
      holder = new int[a]; 
      capacity = a-1; 
      top = -1; 
     } 

     //Method to Print Stack 
     void PrintStack(){ 
      System.out.println(Arrays.toString(this.holder)); 
     } 

     //Method to PUSH 
     void push(int a){ 
      //Check for StackOverflow 
      if(top == capacity){ 
       System.out.println("Stack Overflow!!!"); 
       } 
      else{ 
       top++; 
       this.holder[top] = a; 
      } 
     } 

     //Method to POP 
     int pop(){ 
      //Check for StackUnderflow 
      if(top == -1){ 
       System.out.println("Stack Underflow"); 
      } 
      else{ 
       return this.holder[top]; 
       this.holder[top] = null; 
       top--; 
      } 
     } 
    } 
+0

不要將該值設置爲空即可。只要你的上面是正確的,你應該沒有問題。您不能將基本類型int設置爲null。 – brso05 2014-10-09 18:52:35

回答

1

由於這是的(原始)整數的數組,就不能分配給null在它的元件。實際上,在創建數組時,其元素不是null,它們被設置爲零,這是整數的默認初始值。

如果數組是一個對象數組,那麼使用null替換彈出的元素將非常重要,否則這些對象將不會被垃圾收集。當數組是原始類型時,該問題不存在,因此您可以保持原樣。

但是,我建議你改變你的數組打印方法,因爲無論堆棧的當前大小如何,它總是打印整個數組。這會讓人困惑。您應該只將數組打印到「頂部」元素。

1

如果你想表示null在整數數組,使用java Integer類型,而不是本機int類型int pop()功能。

將舊值留在堆棧中未使用的位置並不可怕。它曾經是數字零和空值之間沒有區別,所以修改未使用的時隙中的值沒有任何優勢。

1

我認爲以下可能是更準確的表達你想要完成的方式。將int轉換爲Integer,並返回null,因爲它是Integer類型,現在允許它。

public class Stack{ 

     Integer[] holder; 
     int capacity; 
     int top; 

     //Constructor 
     Stack(int a){ 
      holder = new Integer[a]; 
      capacity = a-1; 
      top = -1; 
     } 

     //Method to Print Stack 
     void PrintStack(){ 
      System.out.println(Arrays.toString(this.holder)); 
     } 

     //Method to PUSH 
     void push(int a){ 
      //Check for StackOverflow 
      if(top == capacity){ 
       System.out.println("Stack Overflow!!!"); 
       } 
      else{ 
       top++; 
       this.holder[top] = a; 
      } 
     } 

     //Method to POP 
     Integer pop(){ 
      //Check for StackUnderflow 
      if(top == -1){ 
       return null; 
      } 
      else{ 
       return this.holder[top--]; 
      } 
     } 
    } 
+0

有一個問題,該行返回this.holder [top--];會返回最高值?我很困惑,因爲好像它會返回第二個輸入的整數而不是最後輸入的值... – satnam 2014-10-09 19:14:43

+0

編寫單元測試來證明或反駁行爲可能是有益的。使用top--獲取數組中的當前項(返回),然後遞減top的索引。這與--top相反。 – tjg184 2014-10-09 19:30:46