My dequeue method currently does not delete the item I wish for it too, instead it deletes the last element from the collection. For example,
If I add in the elements: 1, 2, 3 My toString method will return 1, 2, 3 as expected.
Then when I use my driver to call dequeue, it should dequeue the 0th element, 1 in this case.
Although, the method says "Removed element 1 from the queue" prompting that the T result variable has embodied the correct value, although the method does not work as expected, as when calling the toString method after to print the contents, it will print: 1, 2
Then when I call the enqueue method again, on the same queue, if I enqueue the String 3, it will print this as the new queue: 3, 2, 3
I am confused as to where my logic error is, as I assume it is with the extreme case of the collection being filled, but I still run into errors with my dequeue method when the collection is not at max. I attached my code below.
public class QueueRA<T> implements QueueInterface<T> { protected T[] items; protected int front, back, numItems; @SuppressWarnings("unchecked") public QueueRA() { front = 0; numItems = 0; back = 0; items = (T[]) new Object[3]; } @Override public boolean isEmpty() { return numItems == 0; } @Override public void enqueue(T newItem) throws QueueException { if(numItems == items.length) { resize(); enqueue(newItem); } else { items[back] = newItem; back = (back + 1) % items.length; numItems++; } } @Override public T dequeue() throws QueueException { T result; if(numItems != 0) { result = items[front]; items[front] = null; front = (front + 1) % items.length; numItems--; } else { throw new QueueException("The queue does not contain any elements."); } return result; } @SuppressWarnings("unchecked") @Override public void dequeueAll() { back = 0; front = 0; numItems = 0; items = (T[]) new Object[3]; } @Override public T peek() throws QueueException { T result; if(numItems != 0) { result = items[front]; } else { throw new QueueException("The queue does not contain any elements."); } return result; } /** * */ @SuppressWarnings("unchecked") protected void resize() { T[] newItems = (T[]) new Object[numItems+4]; for(int i = 0; i < numItems; i++) { newItems[i] = items[i]; } this.front = 0; this.back = numItems; this.items = newItems; } /** * */ public String toString() { String toReturn = ""; for(int i = 0; i < numItems; i++) { if( (i+1) == numItems) { toReturn = toReturn.concat(items[i] + " "); } else { toReturn = toReturn.concat(items[i] + ", "); } } return toReturn; } }