Я пытаюсь создать метод toString()
для общей очереди, которая использует ArrayList
.У меня возникли некоторые проблемы в цикле for, использующем StringBuilder
для создания строки, возвращаемой методом toString()
.
Когда я пытаюсь напечатать один из этих объектов, используя toString()
, я получаюException in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
.Я думаю, что проблема в строке, которая читает T element = q.get(front - k);
, но я не совсем уверен.
(переменная front
ссылается на начало очереди, то есть на следующее число, которое будет удалено из очереди).
public String toString() {
//Create new StringBuilder
StringBuilder sBuilder = new StringBuilder();
//If q is empty, return so
if(isEmpty())
sBuilder.append("The queue is currently empty" + "\n");
//else make the string
else {
sBuilder.append("The next item to get removed is " + front + ";\n");
//for loop to create the rest of the list
for (int k = 0; k < getSize(); k++) {
//Set the element num, and find the element.
int elementNum = k + 1;
T element = q.get(front - k);
//Print that element
sBuilder.append("Element " + elementNum + " is " + element + ";\n");
}
}
//return StringBuilder
return sBuilder.toString();
}
Это метод постановки в очередь
public void enqueue(T t) {
//Add to queue
size++;
q.add(rear, t);
rear++;
}
Это метод снятия с очереди
public T dequeue() {
//Minus Size
size--;
//Set the value to value
T value = q.get(front);
//set front equal to null for garbage collection
q.set(front, null);
//Update front
front++;
//return value
return value;
}
У меня также есть метод int getSize()
и метод isEmpty()
.