Java数组实现Queue输出异常求助:期望结果与实际不符
数组实现Queue输出异常问题排查
问题根源
你的代码存在两个关键错误导致输出不符合预期:
- 静态
rear字段未正确初始化:构造函数中写的int rear = -1;是创建了一个局部变量,并没有给类的静态rear字段赋值。Java中静态int类型字段默认值为0,所以队列初始化后rear实际是0,isEmpty()判断rear==-1永远为false,此时arr[0]是数组默认的0值,第一次调用peek()就会返回0。 add方法逻辑漏洞:当前代码中即便队列已满,仍会执行rear++操作,存在数组索引越界的风险。
修复方案
1. 修正构造函数的rear初始化
去掉局部变量声明,直接给类的静态rear字段赋值:
queque(int n){ arr = new int[n]; size = n; rear = -1; // 去掉前面的int,直接操作类的静态字段 }
2. 修复add方法的边界判断逻辑
在判断队列已满后立即返回,避免后续越界操作:
public static void add(int data){ if(rear == size-1){ System.out.println("queue is full"); return; // 新增return,阻止后续代码执行 } rear++; arr[rear] = data; }
修复后的完整代码
import java.util.*; public class first { public static class queque{ static int arr[]; static int size; static int rear; queque(int n){ arr = new int[n]; size = n; rear = -1; } public static boolean isEmpty(){ return rear == -1; } public static void add(int data){ if(rear == size-1){ System.out.println("queue is full"); return; } rear++; arr[rear] = data; } public static int remove(){ if(isEmpty()){ System.out.println("empty queue"); return -1; } int front = arr[0]; for(int i=0;i<rear;i++){ arr[i] = arr[i+1]; } rear--; return front; } public static int peek(){ if(isEmpty()){ System.out.println("empty queue"); return -1; } return arr[0]; } } public static void main(String[] args) { queque q = new queque(5); q.add(2); q.add(3); q.add(4); while(!q.isEmpty()){ System.out.println(q.peek()); q.remove(); } } }
运行修复后的代码,输出将符合预期:
2 3 4
内容的提问来源于stack exchange,提问作者Sidharth sharma
相关产品推荐
相关产品推荐

