【问题标题】:Java Stack method (multipop) Beginner javaJava Stack 方法(multipop) 初级java
【发布时间】:2010-12-18 02:45:52
【问题描述】:

我正在尝试编写一个 Java 方法来执行堆栈中的“多弹出”。

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

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

【问题讨论】:

  • 谢谢大家!一个人照顾它!
  • 这应该被标记为“家庭作业”。

标签: java methods stack


【解决方案1】:
  1. 您执行while 循环直到堆栈耗尽,这可能不是您想要的。如果要检查堆栈中是否有元素,请使用if 语句。
  2. 在循环中,您从 0 迭代到 k,包括端点。这意味着如果 k = 3,您将经历 0、1、2 和 3,从而调用 this.pop() 四次。
  3. 即使您将while 替换为if,您也只能检查堆栈中是否有一个 元素,但您可以多次调用pop()。您应该在循环内进行检查或将检查移到 pop() 内。
  4. 缩进太可怕了:)

【讨论】:

    【解决方案2】:

    看起来像一个错误。

    如果k=1,您将通过i=0i=1 循环。您可以通过将i&lt;=k 更改为i&lt;k 来解决此问题

    【讨论】:

    • 虽然我很欣赏这种认可,但我承认其他一些答案解决了我的答案没有解决的重要问题。例如,while 循环将继续运行内部 for 循环,直到堆栈为空(换句话说,直到 top==null)。正如其他人所建议的那样,可以通过将 while 更改为 if 并将其移动到 for 循环内(交换位置)来解决此问题。
    【解决方案3】:

    这有几个问题:

    1. 括号的格式应该更好[第一眼让我相信不匹配]
    2. 您对 null 大小写的检查应该在 for 循环的中间:for (... ; i&lt;=k &amp;&amp; stack.canPop(); ...
    3. 您需要一种方法来检查以确保有可以弹出的项目。
    4. 正如另一个答案所述,存在一个错误,如果您希望弹出 K 个项目,则条件应为 i

    这应该会遇到异常或无限循环,因为第一个循环确保仍然有一个不为空的“顶部”变量,然后它将它引导到从 0:k 开始的第二个循环。

    【讨论】:

      【解决方案4】:

      你落后了。你想要

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

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

      【讨论】:

        【解决方案5】:

        第一,它循环(k+1)次,从0到k。 2、多次pop后,top可能为null。所以它需要一直检查顶部。

        可以修改如下:

        public void multipop(int k) {

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

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-09-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-20
          • 1970-01-01
          • 1970-01-01
          • 2013-02-11
          相关资源
          最近更新 更多