使用Java堆栈程序而不使用内置类

时间:2012-10-08 12:46:22

标签: java data-structures

我想在不使用util包提供的内置类的情况下在Java中创建堆栈。我编写了这段代码,但每次运行它时都会抛出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();
}


}
}

3 个答案:

答案 0 :(得分:4)

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

看起来你有另一个方法public void Stack(int i),它应该是构造函数。

  

我想在不使用util包提供的内置类的情况下在Java中创建堆栈。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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