Nano Hash - криптовалюты, майнинг, программирование

Ошибка удаления ArrayList

Я работаю над проектом для школы, но сейчас я немного застрял

Моя проблема в том, что у меня есть список массивов квадратов. Каждый квадрат имеет значение (от 0 до 100). Его начальное значение равно 9999, поэтому я могу проверить, проверено ли оно. Если квадрат проверен, я хочу, чтобы он был удален из списка массивов. Так что через какое-то время Квадратов не останется.

есть немного кода, где установлено первое значение, поэтому я проверяю, равно ли значение 9999.

Но я получаю ошибку. Тот, который я не видел раньше.

Исключение в потоке "AWT-EventQueue-0" java.util.ConcurrentModificationException

Вак = Квадрат

это мой код:

while (!vakken.isEmpty()) { // check if empty
        Iterator itrVak = vakken.iterator();
        while (itrVak.hasNext()) {
            Vak vak = (Vak) itrVak.next(); // here is get the error
            if (vak.getValue() != 9999) {// check if square value is 9999
                Collection checkVakken = vak.getNeighbour().values();
                Iterator itre = checkVakken.iterator();
                while (itre.hasNext()) {
                    Vak nextVak = (Vak) itre.next();
                    if (nextVak != null) {
                        if (nextVak.getValue() == 9999) {
                            nextVak.setValue(vak.getValue() + 1); // set value by its neighbour
                            vakken.remove(vak);
                            checkvakken.add(vak);
                        }
                    }
                }
            } else {
                vakken.remove(vak);
                checkvakken.add(vak);
            }
        }
    }

Ответы:


1

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

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

08.06.2012
  • так должно быть itrVak.remove();? но когда я это делаю, он выдает исключение в потоке AWT-EventQueue-0 java.lang.IllegalStateException 08.06.2012

  • 2

    Во время итерации вы должны использовать экземпляр Iterator для удаления объекта:

    itre.remove();

    08.06.2012
  • Но надо снимать с ваккена, а не с итератора. Итак, если это итератор, и я удалю его там, он также будет удален из vakken (arrayList) 08.06.2012
  • @KevinKamer: он будет удален из исходного экземпляра. 08.06.2012
  • итератор не позволяет мне удалить объект. удалять только то, что он обрабатывает. Но он выдает исключение в потоке AWT-EventQueue-0 java.lang.IllegalStateException 08.06.2012
  • он удалит текущий элемент. использовать правильный экземпляр итератора. 08.06.2012
  • @PrinceJohnWesley, я думаю, что нет такого метода, как remove() с аргументом в классе Iterator. Вы можете вызывать так: itre.remove(); 08.06.2012
  • @UnniVMana: да. У него есть пара итераторов. Я имею в виду правильный итератор... извините. я увидел свою ошибку копирования/вставки/редактирования... 08.06.2012

  • 3

    Вы можете попробовать так:

    itre.remove();
    
    08.06.2012

    4

    ИТЕРАТОР никогда не позволяет вам изменять, когда вы выполняете итерацию. Вместо этого вам нужно использовать циклы. Это происходит, потому что вы используете итератор, в то же время другой поток изменяет список...

    08.06.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..