我的代码基本上是一个程序,用于检查是否可以使用有序序列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;
}
答案 0 :(得分:1)
答案 1 :(得分:0)
您尚未初始化'Stack'成员变量。