我想在不使用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();
}
}
}
答案 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],这显然会引发错误。仔细逐行检查您的代码,您将能够确切地看到正在发生的事情。