简体   繁体   中英

displaying circular queue in java

I have the following code where I have implemented a circular array. The problem comes when I try to display it. The display method works well until the array gets full and last goes back to 0. Therefore last and first are both 0 and the for loop doesn't execute.

public class PassengerQueue 
{

private Passenger[] queueArray = new Passenger[TrainStation.WAITING_ROOM_CAPACITY];
private int first = 0;
private int last = 0;
private int maxStayInQueue = 0; //number of seconds that the passenger who stayed longest in the queue
private int maxLength = 0; //the maximum legth that was reached by the queue
private int currentSize = 0;

public void add(Passenger next)
{
    //if the queue is not full - check for the circular queue
    if (isFull()){
        System.out.println("The queue is full");
    }
    else
    {

        queueArray[last] = next; 
        last = (last + 1) % queueArray.length;

        currentSize++;
        maxLength++;

    }

}

public Passenger remove()
{
    Passenger removedPassenger = null;
    //if the queue array is not empty
    //remove passenger
    if (isEmpty())
    {
        System.out.println("The queue is empty");
    }
    else
    {
        removedPassenger = queueArray[first];
        queueArray[first] = null;
        first = (first + 1) % queueArray.length;
        currentSize--;

    }
    return removedPassenger;
}   

public Boolean isEmpty()
{
    return (currentSize == 0);
}

public Boolean isFull()
{
    return (currentSize == queueArray.length);
}


public void display()
{
    if (isEmpty())
    {
        System.out.println("The queue is empty");
    }
    else
    {
        for(int i = first; i < last; i++)
        {
            queueArray[i].display();
        }
    }
}

Any help would be appreciated! Thank You

Just use the properties on the array itself to display:

public void display()
{
    if (isEmpty())
    {
        System.out.println("The queue is empty");
    }
    else
    {
        for(int i = 0; i < queueArray.length; i++)
        {
            queueArray[i].display();
        }
    }
}

You can change the loop so it iterates from 0 to size. This also fixes the problem where last is less than first because items have been removed.

    for(int i = 0; i < currentSize; i++)
    {
        queueArray[(first + i) % queueArray.length].display();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM