Почему это не имеет смысла? Удаление узлов

У меня есть код, который принимает пользовательский ввод и увеличивает счетчик для печати и удаления. Я добавил несколько строк для печати, чтобы увидеть разницу в количестве между связанным списком и текущей позицией, и вот что я получил:

Enter a command from the list above (q to quit): 
2
Deleted: e                e                5                $5.0
 Current record is now first record.
4
5
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
        at java.util.LinkedList.entry(LinkedList.java:365)
        at java.util.LinkedList.get(LinkedList.java:315)
        at bankdata.command(bankdata.java:158)
        at bankdata.main(bankdata.java:314)
Java Result: 1
BUILD SUCCESSFUL (total time: 18 seconds)

введите команду 2, команда удаления текущего узла. Текущий узел является последним в связанном списке размером 5, что технически означает 0-4.

Так почему же я запускаю этот код:

//currentAccount is a static int that was created at the start of my code.
//It got it's size because the int is saved every time a new node is made.
//The most recent size correlates with the last position in the linked list.
            int altefucseyegiv = accountRecords.size();
            System.out.println("Deleted: " + accountRecords.get(currentAccount)
                    + "\n Current record is now first record.");
            System.out.println(currentAccount);
            System.out.println(accountRecords.size());
            accountRecords.remove(currentAccount);
            System.out.println("Deleted: " + accountRecords.get(currentAccount)
                    + "\n Current record is now first record.");
            if(altefucseyegiv == 1)
            {
                currentAccount = -1;
            }
            else
            {
                currentAccount = 0;
            }
            records.currentAcc(currentAccount, accountRecords);
            return;

Я получаю эту ошибку???

Я не совсем понимаю! Потому что я удаляю.get(4)th, а это значит, что я просто удаляю 5 элемент, и я не имею в виду любовь. Может кто-нибудь объяснить и, возможно, помочь мне исправить это, пожалуйста?

3 ответа

Решение

Пытаться

Object obj = accountRecords.remove(currentAccount);
System.out.println("Deleted: " + obj + "\n Current record is now first record.");

Я предполагаю, что вы инициализировали currentAccount как accountRecords.size() - 1 а также accountRecords имеет 5 узлов.

затем currentAccount имеет значение 4, и вы удаляете 4-й элемент из списка, оставляя accountRecords всего 4 элемента.

Тогда вы пытаетесь получить accountRecords.get(4) из списка где accountRecords имеет только 4 элемента и допустимые индексы элементов 0..3Вот почему вы получаете ошибку.

Исключение IOFB выбрасывается линией

System.out.println("Deleted: " + accountRecords.get(currentAccount)
                + "\n Current record is now first record.");

Вы удалили 5-й элемент, так что теперь нет 5-го элемента для отображения (запомните, позиции массива начинаются с 0)

Я думаю, что твоя ошибка - твоя печать

System.out.println("Deleted: " + accountRecords.get(currentAccount)
                + "\n Current record is now first record.");

<- вы получаете IndexOutOfBoundsException, потому что вы удалили последнюю запись в списке, или я ошибаюсь? может быть попробовать:
System.out.println("Удалено: " + accountRecords.get(currentAccount-1) + "\n Текущая запись теперь является первой записью.");

Другие вопросы по тегам