Java程序中堆栈实现的push()部分中的NullPointerException

时间:2012-08-25 12:28:46

标签: java nullpointerexception stack

我的代码基本上是一个程序,用于检查是否可以使用有序序列1,2,3 ...,n来生成此序列的排列,如用户使用堆栈作为临时存储结构所指定的那样。用户可以选择输入n和他希望使用2种方法生成的排列;通过文本文件或直接在命令行中。 因此,例如,如果用户输入5 1 3 5 4 2,则n将被解释为第一个数字,即5,然后其余数字是他希望看到的排列是否可以从1 2 3 4 5(注意,1 2 3 4 5是有序的,1是在该堆栈的顶部)。在这里你有1个直接使用,然后2个存储在堆栈中,然后3个被使用,然后4个存储在2的顶部,然后5个被使用,然后4个弹出,然后弹出2以生成排列。 我遇到的问题是每当我尝试生成1 2 3 ... n的起始堆栈时,我的程序面临NullPointerException。它指向这段代码的最后一行:

public static void main(String args[])
{
    int[] arr;
    arr = null;
       try
       {
        if(args[0].charAt(0) == '2') 
        {   
            try
            {   
                FileInputStream file = new FileInputStream(args[1]);
                arr = input(file);
            }
            catch (FileNotFoundException e)
            {
                System.out.println("File not found.");
                System.exit(0);
            }
        }
        else if (args[0].charAt(0) == '1')
        {   
            arr = input();
        }   
           else 
        {
            System.out.println("Please enter a valid input option.");
            System.exit(0);
        }
    }
    catch (ArrayIndexOutOfBoundsException e)
    {
        System.out.println("Please enter a valid input option."); 
        System.exit(0);
     }
    int x;
    x = arr.length;
    System.out.println(x);
    ArrayPerm start = new ArrayPerm(x);
    ArrayPerm temp = new ArrayPerm(x);
    for (int i = 0; i < x; i++)
    {
        *start.push(x - i);*        
    }

它还指出:

public void push(int j)
{
    top++;
    Stack[top] = j;
}

ArrayPerm类基本上是堆栈实现。 我试过这样做:

public void push(Integer j)
{
    if (j == null)
    {
        throw new NullPointerException("NULL ELEMENT!");
    }
    else
    {
        top++;
        Stack[top] = j;
    }
}

但它仍然显示异常。如果有人能指出我正确的方向,我真的很感激。我花了一个小时在我的代码中查找问题而没有结果。 所以,提前谢谢!

编辑:这是类的定义,所以不应该初始化Stack?

public class ArrayPerm
{
  private int[] Stack;
  private int top;
  public int size;

public ArrayPerm(int n)
{
    size = n;
    int[] Stack = new int[n];
    top = -1;
}

2 个答案:

答案 0 :(得分:1)

shadowing变量Stack。取代

int[] Stack = new int[n];

stackArray = new int[n];

答案 1 :(得分:0)

您尚未初始化'Stack'成员变量。