我正在尝试实现CircularArrayQueue,并且我的方法isEmpty()在没有填充队列时返回false。你能指出我的错误吗?
public CircularArrayQueue(int size)
{
array = new Integer[size];
front = rear = 0;
}
... code omitted
// returns the number of elements in the queue
@Override
public int noItems()
{
return array.length - getCapacityLeft();
}
// returns true if the queue is empty
@Override
public boolean isEmpty()
{
return noItems() == 0;
}
//returns the number of available spots in the queue before a resize needs to be done
public int getCapacityLeft()
{
return (array.length - rear + front)%array.length;
}
答案 0 :(得分:1)
初始化队列时,前后均为零。
.db
所以public int getCapacityLeft()
{
return (array.length - rear + front)%array.length;
}
返回getCapacityLeft
,这是零。
您需要正确计算项目数量,并考虑如何管理完整缓冲区和空缓冲区之间的差异 - 在两种情况下,您似乎都在使用rear == front。决定如何区分,然后你可以编写一个getCapacityLeft,如果缓冲区为空则返回array.length,如果已满,则返回零。
答案 1 :(得分:0)
试
public int getCapacityLeft(){
return array.length - Math.abs(front - rear) + 1;
}
答案 2 :(得分:0)
return (array.length - rear + front)%array.length;
上面的代码,当数组大小 0 时,getCapacityLeft
会抛出ArithmeticException
。如果不启用除以零。
答案 3 :(得分:0)
试试这个
if(front == -1 && rear == -1)
return ture;
else
return false;