0

我想在 Java 中创建一个堆栈,而不使用 util 包提供的内置类。我编写了这段代码,但每次运行它都会引发 NullPointerException。我做了两节课。第一个包含堆栈的方法和逻辑,即Push和Pop以及检查堆栈空和满的方法;

private int MaxStack;
private int emptyStack;
public static int top;
private char[] items;

public SimpleStack(int i) {
    // TODO Auto-generated constructor stub
}

public void Stack(int i)
{
    MaxStack=i;
    emptyStack=-1;
    top=emptyStack;
    items=new char[MaxStack];
}
public void Push( char c){

 items[top]=c;
 top++;}
public char Pop(char c){

 return items[top--];}
public boolean full(){

 return top+1==MaxStack;}
public boolean empty(){

return top== emptyStack;}}

第二个类包含运行代码的主要方法:

public static void main(String[] args) throws IOException
{
    // TODO Auto-generated method stub
SimpleStack ab=new SimpleStack(10);
char ch;

while((ch= (char)System.in.read())!='\n')
{   

    if(!ab.full()){
        ab.Push(ch);
        }
        }
while(!ab.empty())
{
System.out.println(ab.Pop(ch));
System.out.println();
}


}
}
4

3 回答 3

4

问题是您的构造函数没有做任何事情。

看来您有另一种方法public void Stack(int i),应该是构造函数。

我想在 Java 中创建一个堆栈,而不使用 util 包提供的内置类。

即便如此,你还是应该阅读内置 Stack 类的代码,因为你可以学到一些有用的东西,比如使用标准格式和编码约定。

于 2012-10-08T12:50:39.610 回答
0

正如其他人所说,您的构造函数没有做任何事情。但我看到的另一个问题是,即使您将 Stack(int) 中的逻辑移动到 SimpleStack(int),您仍然将 int“top”设置为等于“emptyStack”,即 -1。因此,现在当您将一个项目推入数组时,您最初是在尝试将其推入 items[-1],这显然会引发错误。仔细逐行检查您的代码,您将能够准确地看到发生了什么。

于 2012-10-08T13:54:38.937 回答
0

尝试将 Stack(int) 中的逻辑移动到 SimpleStack(int)

于 2012-10-08T12:49:52.180 回答