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

Java数组实现Queue输出异常求助:期望结果与实际不符

数组实现Queue输出异常问题排查

问题根源

你的代码存在两个关键错误导致输出不符合预期:

  1. 静态rear字段未正确初始化:构造函数中写的int rear = -1;是创建了一个局部变量,并没有给类的静态rear字段赋值。Java中静态int类型字段默认值为0,所以队列初始化后rear实际是0,isEmpty()判断rear==-1永远为false,此时arr[0]是数组默认的0值,第一次调用peek()就会返回0。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:27:57