当我尝试测试时;例如,如果我按下4个元素,然后我创建一个for循环:
for( int i=0; i<=stack.size(); i++){
System.out.println(stack.pop());
}
它不会输出最后一个元素。我的pop方法有问题吗?
public void push(E element){
top= new Node<E>(element,top);
size++;
}
public E pop(){
E popped;
if(this.isEmpty()){
throw new EmptyStackException();
}
popped=top.data;
this.setTop(top.next);
size--;
return popped;
}
答案 0 :(得分:3)
问题是你用大小迭代堆栈。
看看for循环中会发生什么:
所以你不要弹出最后一个元素。
但是,如果堆栈具有下一个元素,则应该实现一个hasNext()
方法,而不是使用大小为限制的for循环:
while(stack.hasNext())
{
Element e = stack.pop();
// Do stuff...
}
如果堆栈中没有更多元素,则pop()
返回null,并按如下方式循环:
Element e;
while((e = stack.pop()) != null)
{
// Do stuff...
}
答案 1 :(得分:0)
如果您使用.pop()
变量的大小得到1,那么如果在循环结束时省略增量,那么它会更好:
for( int i=0; i<=stack.size(); ){
System.out.println(stack.pop());
}