2012-03-20 60 views
1

我想在堆棧上進行push和pop操作,並嘗試從堆棧中彈出最小元素。它顯示空指針異常。我試着調試它。但仍然是拋出空點異常。線程主例外。 NullPointException

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.*; 
public class Stacks { 
     static void Stack_Push(Stack<Integer> SP, int a) 
     { 
      SP.push(new Integer(a)); 
      System.out.println("stack: " + SP); 
     } 

     static void stack_pop(Stack<Integer> SP) { 
      System.out.print("Popping Minimum Element "); 
      int n = 0, k = 0; 
      final int [] pop_array = null; 
      while (!SP.empty()){ 
       int pop_elem = SP.pop(); 
       pop_array[k++] = pop_elem; 
      } 

      for (int i = 1; i < n; i++) { 
       int j = i; 
       int B = pop_array[i]; 
       while ((j > 0) && (pop_array[j-1] > B)) { 
        pop_array[j] = pop_array[j-1]; 
        j--; 
       } 
       pop_array[j] = B; 
      } 
      System.out.println("stack: " + pop_array[0]); 
    } 

    public static void main(String args[]) throws IOException { 
     Stack<Integer> st = new Stack<Integer>(); 
     int num, n; 
     InputStreamReader ir = new InputStreamReader(System.in); 
     BufferedReader bf = new BufferedReader(ir); 
     System.out.print("Enter number of elements : "); 
     String str = bf.readLine(); 
     num = Integer.parseInt(str); 
     for(int i = 0; i < num; i++){ 
       System.out.print("Enter elements : "); 
      str = bf.readLine(); 
      n = Integer.parseInt(str); 
      Stack_Push(st, n); 
     } 

     stack_pop(st); 
     try { 
      stack_pop(st); 
     } 
      catch (EmptyStackException e) { 
      System.out.println("empty stack"); 
     } 
    } 
} 
+2

請張貼例外本身,讓我們知道哪些線把它扔。 – paislee 2012-03-20 18:29:58

+0

bf.readLine也可能返回null – assylias 2012-03-20 18:39:39

回答

2

stack_pop方法,你試圖影響價值爲空數組:

final int [] pop_array = null; 
... 
pop_array[k++] = pop_elem; 

你應該包含在你的棧元素的數量進行初始化。

有在此方法中的其他問題也一樣:

for (int i = 1; i < n; i++) 

其中n在開始時定義爲0,從來沒有改變過。

你爲什麼要打兩次stack_pop(st)?第二次調用將始終使用空的堆棧。如果是測試如果異常被捕獲,該行

System.out.println("stack: " + pop_array[0]); 

使你的程序崩潰爲您試圖訪問pop_array[0],而您初始化堆棧的大小你的陣列,這是0

0

在下面的代碼中,您將pop_array設置爲null,然後嘗試使用它。這是你的問題。

 final int [] pop_array = null; 
     while (!SP.empty()){ 
      int pop_elem = SP.pop(); 
      pop_array[k++] = pop_elem; 
     } 
0

你沒有初始化您pop_array:

final int [] pop_array = null; 

試試這個:

final int [] pop_array = new int[SP.size()]; 

你也可能需要在你的系統輸出保護:

if (pop_array.length > 0) { 
    System.out.println("stack: " + pop_array[0]); 
} 
0

pop_array是不初始在編,

final int [] pop_array = null; 

變化成,

final int [] pop_array = new int [SP.size()]; 
相關問題