我正在尝试在堆栈上执行推送和弹出操作,并尝试从堆栈中弹出最小元素。它显示空指针异常。我试过调试它。但它仍然是抛出零点异常。
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");
}
}
}
答案 0 :(得分: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。
答案 1 :(得分:0)
在下面的代码中,您将pop_array
设置为null
,然后尝试使用它。这是你的问题。
final int [] pop_array = null;
while (!SP.empty()){
int pop_elem = SP.pop();
pop_array[k++] = pop_elem;
}
答案 2 :(得分: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]);
}
答案 3 :(得分:0)
pop_array
未初始化为
final int [] pop_array = null;
将其更改为,
final int [] pop_array = new int [SP.size()];