Как исправить индекс Arraylist за пределами ошибки длины в JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как исправить индекс Arraylist за пределами ошибки длины в Java

Сообщение Anonymous »

Я пишу программу для школы, которая действует как кассовый аппарат. Я запрашиваю ввод цен на товары и воспроизвожу их в продолжающемся ArrayList до тех пор, пока пользователь не введет -1 или 0. 0 означает повторный ввод предыдущей цены в случае ошибки, а -1 завершает цикл.
Я получаю


java.lang.IndexOutOfBoundsException: индекс 0 выходит за пределы длины 0


ошибка при попытке запустить код.
Мне нужно включить метод RemoveLastEntry(), который удалит последнюю цену, введенную в массив, после ввода пользователем 0. Как я могу гарантировать, что массив заполнен и я действительно удаляю последнюю запись?

Я использую Java 11 в Eclipse.

Код работает нормально без использования метода, поскольку я уменьшаю свой счетчик, и на следующей итерации цикла предыдущее местоположение массива перезаписывается, независимо от того, было оно удалено или нет. Сам метод настроен на удаление ArrayList.size()-1, чтобы удалить последнюю запись. Я пробовал это с -2 и 0, но результат все равно выходит за пределы.

Я прочитал предыдущие вопросы и обнаружил, что многие люди не заполнили массив.
Поэтому я запустил заглушку печати, чтобы убедиться, что ArrayList был правильно заполнен, и это так: когда два элемента были помещены в ArrayList, размер был равен 2. Код ошибки также увеличивается по мере того, как больше элементов я помещаю в список. код, но всегда элементы - 1 индекс за пределами предметов - длина 1
Я уверен, что совершаю ошибку новичка, но не могу его найти, и это сводит меня с ума!

для полного контекста ошибки:


Исключение в потоке «main» java.lang.IndexOutOfBoundsException: индекс 0 выходит за пределы для длины 0
в java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
на java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
на java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
в java.base/java.util.Objects.checkIndex(Objects.java:372)
в java.base/java.util.ArrayList.get(ArrayList.java:458)
в C_M_iDeaProject.main (C_M_iDeaProject.java:76)


// declare our array list which will hold our prices!
ArrayList prices = new ArrayList();

// declaring variables to terminate loop, count prices, total prices, and current entry for conditions
int counter = 0;
double entry = 0;
double total = 0;

// our loop to continuously add prices to the array list from input
while (entry != -1) {

System.out.println("Enter a price for item #" + (counter+1) + ": ");
entry = myInput.nextDouble();

// if the entry is a price we will add it to prices and continue with the loop

if (entry != 0 && entry != -1) {
prices.add(entry);
total += entry;
counter++;
}

//if the entry is 0 we will revert back to the previous iteration to re-add

else if (entry == 0.0) {
total -= prices.get(counter-1);
removeLastEntry(prices);
counter--;
}

public static void removeLastEntry(ArrayList anArrayList) {
anArrayList.remove(anArrayList.size()-1);
}


Подробнее здесь: https://stackoverflow.com/questions/554 ... or-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»