【问题标题】:popping an element of a queue at initialisation of for loop ends up popping the same element all the time在 for 循环初始化时弹出队列的元素最终会一直弹出相同的元素
【发布时间】:2023-03-28 12:14:01
【问题描述】:

我正在尝试在 Java 中使用如下 pop 方法。我希望以"c", "b", "a" 的顺序查看字符串。但是,它只会无限打印出"c"。为什么会这样?

Stack<String> a = new Stack<>();
a.push("a");
a.push("b");
a.push("c");
for(String i = a.pop(); !a.isEmpty() ;){
    System.out.println(i);
}

【问题讨论】:

    标签: java collections queue


    【解决方案1】:

    您忘记了 for 循环的“增量”部分。你有初始化部分(调用一次,这就是为什么i 永远保持c)和条件部分,但是你错过了循环的每次迭代执行的最后一部分。

    但是,我建议不要写 for(String i = a.pop; !a.isEmpty(); i = a.pop()),而是使用更合适的 while 循环

    while(!a.isEmpty())
        System.out.println(a.pop());
    

    【讨论】:

    • 其实我没有忘记。我认为 pop 对于增量部分也可以,但这根本不合逻辑..
    • 不合逻辑是什么意思?与for(int i = 0;i &lt; 10;) 比较,很容易看出失败的原因。
    • @deeperwhite pop 适合增量部分,但你没有。
    【解决方案2】:

    替换:

    for(String i = a.pop(); !a.isEmpty() ;)
    

    与:

    for(String i = a.pop(); !a.isEmpty() ; i = a.pop())
    

    事实上,您并没有替换i 中的值,并且堆栈中仍有元素。所以你只是得到一个无限循环,并显示你弹出的最后一个值,即“c”。

    【讨论】:

      猜你喜欢
      • 2017-10-04
      • 2013-12-31
      • 1970-01-01
      • 2018-05-02
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2021-08-13
      相关资源
      最近更新 更多