我不知道为什么我会得到一个超出界限的数组索引,具体来说:
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];
}
}
答案 0 :(得分:0)
根据您的方法,如果您查看deque
方法的这一部分,我假设您正在实施循环队列:
front = (front + 1) % q.length;
return q[front - 1];
您正在移动队列的前端,然后返回新前端之前的项目,因为队列是循环的,front
时0
等于front
等于q.length - 1
,因此尝试访问索引为-1
的数组时出现异常。
修复它的一种方法是在返回像return q[(front - 1 + q.length) % q.length];
这样的出列元素时应用模块化操作,另一种方法是在移动前面之前存储元素,如下所示:
int element = q[front];
front = (front + 1) % q.length;
return element;