Я пишу программу для школы, которая действует как кассовый аппарат. Я прошу вводить цены товаров и воспроизводить их в текущем 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<Double> prices = new ArrayList<Double>();
// 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<Double> anArrayList) {
anArrayList.remove(anArrayList.size()-1);
}