Исключение в теме темы.NullPointException - PullRequest
1 голос
/ 20 марта 2012

Я пытаюсь выполнить операцию push и pop для стека и пытаюсь извлечь минимальный элемент из стека.Это показывает исключение нулевого указателя.Я попытался отладить это.Но все равно это исключение нулевой точки.

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

Ответы [ 4 ]

2 голосов
/ 20 марта 2012

В методе 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 голосов
/ 20 марта 2012

pop_array не инициализируется в,

final int [] pop_array = null;

изменить его на

final int [] pop_array = new int [SP.size()];
0 голосов
/ 20 марта 2012

Вы не инициализировали свой 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 голосов
/ 20 марта 2012

В приведенном ниже коде вы устанавливаете pop_array на null и затем пытаетесь работать с ним.Это твоя проблема.

        final int [] pop_array = null;
        while (!SP.empty()){
          int pop_elem = SP.pop();
          pop_array[k++] = pop_elem;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...