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()];