Java CircularArrayQueue是isEmpty方法

时间:2017-03-07 08:47:27

标签: java data-structures

我正在尝试实现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;
}   

4 个答案:

答案 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;