Ошибка в логике при создании метода toString () для общего класса очереди - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь создать метод 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().

1 Ответ

0 голосов
/ 03 мая 2019

Хорошо, мне действительно нужно увидеть полную реализацию, чтобы быть уверенным, но я думаю, что это работает. Ваша передняя и задняя части, вероятно, начинаются с нуля, а когда вы добавляете элементы, вы увеличиваете тыл, поэтому элементы, находящиеся позже в очереди, имеют более высокий индекс.

Допустим, мы начинаем с пустой очереди и добавляем 3 элемента. Фронт будет 0, тыл будет 3, а размер будет 3. (PS: вам не нужна переменная для размера, вы можете просто использовать тыл минус спереди). Поэтому, когда вы делаете q.get (front-k), вы пытаетесь получить элементы с индексами 0 (все в порядке), -1 и -2 (вот где вы получите ошибку). Вы захотите сделать q.get (front + k) или q.get (back-k), в зависимости от того, в каком порядке вы хотите печатать элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...