You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Queue队列遍历时元素提前耗尽 未达目标就退出循环问题

问题根因

程序提前退出的核心原因是for循环的终止条件设计错误,和队列动态变化的特性不匹配:

  • 初始状态下队列peopleInQueue共7个元素,循环每次执行peopleInQueue.poll()移除队首元素后,队列的size()返回值会同步减1
  • 同时循环变量i每次迭代固定自增1,两个值反向变化,导致循环提前满足终止条件,逐次核对循环执行状态如下:
    • 初始:i=0,队列长度=7,0<7成立,处理Bruce Banner,移除元素后队列长度=6,i自增为1
    • 第2次判断:i=1,队列长度=6,1<6成立,处理Steve Rogers,移除后队列长度=5,i自增为2
    • 第3次判断:i=2,队列长度=5,2<5成立,处理Tony Stark,移除后队列长度=4,i自增为3
    • 第4次判断:i=3,队列长度=4,3<4成立,处理Natalia Romanova,移除后队列长度=3,i自增为4
    • 第5次判断:i=4,队列长度=3,4<3不成立,循环直接终止
  • 循环终止时队列内还剩Peter Parker、You、-1三个元素,完全没走到判断You的分支,和预期逻辑不符。

另外代码还有一个小瑕疵:购票提示的字符串拼接缺少空格,会输出Bruce Bannerhas purchased a ticket的错误格式,和预期输出不一致。

修复方法

处理这种动态出队的场景,不需要依赖自增计数的for循环,直接用while循环持续判断队首元素即可,逻辑更贴合队列的操作特性:

  • 只要队列不为空,就取出队首元素判断
  • 如果队首是You,输出购票提示后终止循环
  • 否则移除队首,更新排队位置,输出对应提示
  • 补全字符串拼接缺失的空格

修复后的完整代码如下:

import java.util.LinkedList;
import java.util.Queue;

class Main {
   public static void main (String[] args) {
      Queue<String> peopleInQueue = new LinkedList<>();
      peopleInQueue.add("Bruce Banner");
      peopleInQueue.add("Steve Rogers");
      peopleInQueue.add("Tony Stark");
      peopleInQueue.add("Natalia Romanova");
      peopleInQueue.add("Peter Parker");
      peopleInQueue.add("You");
      peopleInQueue.add("-1");

      int youPosition = 6;
      
      System.out.println("Welcome to the ticketing service... ");
      System.out.println("You are number " + youPosition + " in the queue.");
       
      // 替换原错误for循环,用while循环持续判断队首元素
      while (!peopleInQueue.isEmpty()){
         String name = peopleInQueue.peek();
         if(name.equals("You")){
            System.out.println("You can now purchase your ticket!");
            break;
         }
         else{
            youPosition--;
            peopleInQueue.poll();
            // 补全name后缺失的空格
            System.out.println(name + " has purchased a ticket.");
            System.out.println("You are now number "+ youPosition);
         }
      }
   }
}

运行修复后的代码即可完全匹配预期输出。

内容的提问来源于stack exchange,提问作者Brownbp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:09:30