java - 主线程中的异常。空指针异常

标签 java nullpointerexception

我正在尝试在堆栈上执行压入和弹出操作,并尝试从堆栈中弹出最小元素。它显示空指针异常。我尝试调试它。但它仍然抛出空点异常。

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"); 
        }
    }
}

最佳答案

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)初始化了数组。

关于java - 主线程中的异常。空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9792757/

相关文章:

java - 象夫 : Cannot convert into sequence file

java - 如何使用 Java 中的 Joda 时间库获取 ISO 年的月份开始和结束日期

java - Java中的弹跳球

java - 调用 moveToFirst() 时光标抛出 NullPointerException

java - 多重测试 TestNG.xml 文件导致 java.lang.NullPointerException

java - BigClip 的问题

java.lang.RuntimeException : Unable to instantiate service 错误

java - 用Java读取XSD文件

java - 线程 "AWT-EventQueue-0"结果集中出现 java.lang.NullPointerException 异常

android - 在回收站 View 上创建上下文菜单时 menuInfo 为 null