Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 主线程中出现异常。NullPointException_Java_Nullpointerexception - Fatal编程技术网

Java 主线程中出现异常。NullPointException

Java 主线程中出现异常。NullPointException,java,nullpointerexception,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,

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

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"); 
        }
    }
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.*;
公共类堆栈{
静态无效堆栈推送(堆栈SP,int a)
{ 
SP.push(新整数(a));
System.out.println(“堆栈:+SP”);
} 
静态无效堆栈_pop(堆栈SP){
系统输出打印(“弹出最小元素”);
int n=0,k=0;
final int[]pop_数组=null;
而(!SP.empty()){
int pop_elem=SP.pop();
pop_数组[k++]=pop_元素;
}
对于(int i=1;i0)和&(pop_数组[j-1]>B)){
pop_数组[j]=pop_数组[j-1];
j--;
}
pop_数组[j]=B;
}
System.out.println(“堆栈:+pop_数组[0]);
}
公共静态void main(字符串args[])引发IOException{
Stack st=新堆栈();
int num,n;
InputStreamReader ir=新的InputStreamReader(System.in);
BufferedReader bf=新的BufferedReader(ir);
System.out.print(“输入元素数:”);
字符串str=bf.readLine();
num=Integer.parseInt(str);
for(int i=0;i
堆栈\u pop
方法中,您试图影响空数组的值:

final int [] pop_array = null;
...
pop_array[k++] = pop_elem;
您应该使用堆栈中包含的元素数对其进行初始化

这种方法还存在其他问题,如:

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

当您尝试访问
pop_数组[0]
时,使您的程序崩溃,而您使用堆栈大小初始化了数组,堆栈大小为0。

在下面的代码中,您将
pop_数组设置为
null
,然后尝试使用它。这是你的问题

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

您没有初始化pop_数组:

final int [] pop_array = null;
试试这个:

final int [] pop_array = new int[SP.size()];
此外,您可能需要在sysout周围设置一个防护装置:

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

pop_数组
未在初始化

final int [] pop_array = null;
换成,

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

请发布异常本身,以便我们知道哪一行抛出它。bf.readLine也可能返回null
final int [] pop_array = new int [SP.size()];