В моей Циркулярной матричной очереди есть несколько незавершенных частей, но я сделал это достаточно далеко, чтобы мои основные методы могли функционировать. Тем не менее, по какой-то причине, когда я использую свою функцию удаления очереди, она, кажется, работает правильно при получении фронта, но при повторном отображении моей очереди все мои элементы не отображаются, но очередь все еще может извлечь фронт и перейти к следующему элементу.
Я пытался посмотреть в Интернете другие методы удаления очереди, чтобы увидеть, где я могу ошибаться, но безрезультатно, поскольку все они похожи на мой метод. Я проверил, связано ли это с установкой моей очереди [frontIndex] равной нулю, но когда я установил ее равной следующей переменной, она не удаляет предыдущий элемент и не отображается должным образом IE: 1-2-3-4-5(после завершения очереди) 2-2-3-4-5
Это мои переменные, а также мой метод удаления из очереди
private T[] queue; //Circular array of queue entries and one unused element
private int frontIndex;
private int backIndex;
private boolean integrityOK;
private static final int DEFUALT_CAPACITY = 50;
private static final int MAX_CAPACITY = 10000;
/////////////////////////THE ISSUE///////////////////
@Override
public T dequeue() {
//Start of if
if(isEmpty()) {
System.out.println("Queue is empty");
}//End of if
//retrieve front than delete it
T front = queue[frontIndex];
queue[frontIndex] = null;
frontIndex = (frontIndex + 1) % queue.length;
return front;
}
/////////////////THE ISSUE///////////////////
Это также мой метод toString
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
int temp = 0;
sb.append("queue: ( ");
if(queue.length == 0) {
sb.append("empty queue");
}
while(queue[temp]!=null) {
sb.append(queue[temp].toString());
sb.append("--->");
temp++;
}
sb.append(")");
return sb.toString();
}
это метод, который я тестирую в моем основном классе
public static void testIntegers() {
System.out.println("\n\nTesting with some integers");
ArrayQueue<Integer> myIntegerQueue = new ArrayQueue<>();
int testSet[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < testSet.length; i++) {
myIntegerQueue.enqueue(testSet[i]);
}
System.out.println(myIntegerQueue);
for (int i = 0; i < testSet.length; i++) {
System.out.println("Dequeue " + myIntegerQueue.getFront());
myIntegerQueue.dequeue();
// System.out.println("Dequeue " + myIntegerQueue.dequeue());
System.out.println(myIntegerQueue);
}
// What happens if we try to dequeue from an empty queue?
System.out.println("Dequeue " + myIntegerQueue.getFront());
myIntegerQueue.dequeue();
System.out.println(myIntegerQueue);
}
Это то, что он показывает
Testing with some integers
queue: ( 1--->2--->3--->4--->5--->)
Dequeue 1
queue: ( )
Dequeue 2
queue: ( )
Dequeue 3
queue: ( )
Dequeue 4
queue: ( )
Dequeue 5
queue: ( )
Queue is empty
Dequeue null
Queue is empty
queue: ( )
после ожидаемого результата первой очереди
очередь: (2 ---> 3 ---> 4 ---> 5 --->)
фактический результат
очередь: ()
может кто-нибудь сообщить мнеили направьте меня в правильном направлении относительно того, что я делаю неправильно, потому что я в растерянности. заранее спасибо!