我的Stack类中的Pop或Push方法是否写得不正确?

时间:2015-10-15 18:09:47

标签: java stack push pop

当我尝试测试时;例如,如果我按下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;
    }

2 个答案:

答案 0 :(得分:3)

问题是你用大小迭代堆栈。

看看for循环中会发生什么:

  1. i = 0; size = 4;我&lt; = size == true
  2. i = 1; size = 3;我&lt; = size == true
  3. i = 2; size = 2;我&lt; = size == true
  4. i = 3; size = 1;我&lt; = size == false
  5. 所以你不要弹出最后一个元素。

    但是,如果堆栈具有下一个元素,则应该实现一个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());
}