Java Stack方法(multipop)初学java

时间:2009-11-18 23:58:31

标签: java methods stack

我正在尝试编写一个Java方法来从堆栈中预先形成“多重弹出”。

它应该对stack个对象k执行“弹出”操作次数。这就是我的想法,但它并不完全正确。有任何帮助吗?

public void multipop(int k) {
    while (top != null) {
        for (int i = 0; i <= k; i++) {
            this.pop();
        }
    }
}

5 个答案:

答案 0 :(得分:6)

  1. 执行while循环直到堆栈耗尽,这可能不是您想要的。如果要检查堆栈中是否有元素,请使用if语句。
  2. 在循环中,您将从0迭代到k(包括0和k)。这意味着如果k = 3,则经过0,1,2和3,因此调用this.pop()四次。
  3. 即使您将while替换为if,也只会检查堆栈中是否有一个元素,但您可以调用pop()多次。您应该在循环内部进行检查,或者在pop()
  4. 中移动检查
  5. 缩进很糟糕:)。

答案 1 :(得分:3)

这有一些问题:

  1. 括号应格式更好[第一眼看上去让我相信不匹配]
  2. 您对空案例的检查应位于for循环的中间:for (... ; i<=k && stack.canPop(); ...
  3. 您需要一种检查方法,以确保您可以弹出一个项目。
  4. 正如另一个答案所述,如果你想弹出K个项目,则会有一个错误,那么这个问题应该是i&lt; ķ。
  5. 这应该遇到异常或无限循环,因为第一个循环确保仍然存在一个非顶空的“top”变量,然后它将它引导到从0:k开始的第二个循环。

答案 2 :(得分:3)

看起来像是一个错误。

如果k=1,您将使用i=0i=1完成循环。您可以通过将i<=k更改为i<k

来解决此问题

答案 3 :(得分:0)

你是一个人。你想要

 for(int i =0; i < k; i++)

如果有更多问题,您需要提供更多代码和问题。

答案 4 :(得分:0)

1,它循环(k + 1)次,从0到k。 2,在几次弹出之后,top可能为null。所以它需要一直检查顶部。

可以修改如下:

public void multipop(int k){

    for (int i = 0; top != null && i < k; i++) {
        this.pop();
    }

}