队列的出队方法出错

时间:2017-11-09 21:09:39

标签: java queue

我不知道为什么我会得到一个超出界限的数组索引,具体来说:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

错误在于我的出列方法,它如下:

public int dequeue ()
{
    if(isEmpty() == true)
    {
        return -1;
    }
    else
    {
        count--;
        front = (front + 1) % q.length;
        return q[front - 1];
    }
}

我尝试了一些事情,但我仍然无法找到解决方案。感谢所有帮助,并提前感谢所有回复者。

编辑(解决方案):

public int dequeue ()
    {
        if(isEmpty() == true)
        {
            return -1;
        }
        else
        {
            count--;
            front = (front + 1) % q.length;
            return q[(front - 1 + q.length) % q.length];
        }
    }

1 个答案:

答案 0 :(得分:0)

根据您的方法,如果您查看deque方法的这一部分,我假设您正在实施循环队列:

    front = (front + 1) % q.length;
    return q[front - 1];

您正在移动队列的前端,然后返回新前端之前的项目,因为队列是循环的,front0等于front等于q.length - 1,因此尝试访问索引为-1的数组时出现异常。

修复它的一种方法是在返回像return q[(front - 1 + q.length) % q.length];这样的出列元素时应用模块化操作,另一种方法是在移动前面之前存储元素,如下所示:

    int element = q[front];
    front = (front + 1) % q.length;
    return element;