Проблема с удалением переменных классов потомков

Прототип кода - Проблема с циклом foreach для коллекции

Код - полиморфный менеджер вещей на настенной полке.

Архитектура: Есть 3 класса наследника класса Thing (Book, Magnet, Clothes). Т.е. каждый из них является потомком Thing. Это условие по полиморфизму. Класс Manager выполняет текущие операции с элементами коллекции вещей. Класс Menu - интерфейс с пользователем.

    package ThingManager;
    
    public class Book extends Thing {
        long internationalBookNumber;                                //в расшифровке ISBN жалуется на Standart
    
         Book(long internationalBookNumber, String place, String size) {
            super(place, size);
            this.internationalBookNumber = internationalBookNumber;
        }
    
         long getInternationalBookNumber() {
            return internationalBookNumber;
        }
    
         void setInternationalBookNumber(long internationalBookNumber) {
            this.internationalBookNumber = internationalBookNumber;
        }
    
        @Override
        public String toString() {
            return "K`nigga: " + internationalBookNumber ;
        }
    }


    package ThingManager;
    
    public class Clothes extends Thing {
        String size;
    
        public Clothes(String clothesSize, String place, String size) {
            super(place, size);
            this.size = clothesSize;
        }
    
        public String getSize() {
            return size;
        }
    
        public void setSize(String size) {
            this.size = size;
        }
    
        @Override
        public String toString() {
            return "Одёжа размером: " + size;
        }
    }


    package ThingManager;
    
    public class Magnet extends Thing {
        String whereItCameFrom;
    
        public Magnet(String whereItCameFrom, String place, String size) {
            super(place, size);
            this.whereItCameFrom = whereItCameFrom;
        }
    
        public String getWhereItCameFrom() {
            return whereItCameFrom;
        }
    
        public void setWhereItCameFrom(String whereItCameFrom) {
            this.whereItCameFrom = whereItCameFrom;
        }
    
        @Override
        public String toString() {
            return "Магнитик привезён из: " + whereItCameFrom;
        }
    }

    package ThingManager;
    
    import java.util.ArrayList;
    
    public class Manager {
        String place;
        String size;
        ArrayList<Thing> things;
    
        Manager() {
           things = new ArrayList<>();
        }
    
        Manager(String place, String size) {
            this.place = place;
            this.size = size;
        }
    
        void addBook(long serial, String place, String size) {
            Thing thing = new Book(serial,place, size);
            things.add(thing);
        }
    
        void addMagnet(String contry, String place, String size) {
            Thing thing = new Magnet(contry, place, size);
            things.add(thing);
        }
    
        void addClothes(String clothesSize, String place, String size) {
            Thing thing = new Clothes(clothesSize, place, size);
            things.add(thing);
        }
        void delThing(String place, String size) {
            for (Thing thing : things) {
                if ((place.equals(thing.shelfPlace)) & (size.equals(thing.thingSize))) {
                    things.remove(thing);
                    System.out.println("Что-то там удалено");
                    break;
                } else {
                    System.out.println("Нет такого.");
                    break;
                }
            }
        }
    
    }

package ThingManager;

import java.util.ArrayList;
import java.util.Scanner;

public class Menu {
    Scanner scanner;
    Manager manager;

    public static void main(String[] args) {
        Manager manager = new Manager();
        manager.addBook(978 - 5 - 6040043 - 6 - 4, "Лежит слева", "Двухтомник тех.литературы издательства культуры");
        manager.addMagnet("Польша стронг", "висит на холодосе", "с печеньку");
        manager.addClothes("XXL", "дахрензнаетгдеэтотносок", "42");
        Menu menu = new Menu(manager);
        menu.startManager();
    }


    Menu(Manager manager) {
        scanner = new Scanner(System.in);
        this.manager = manager;
    }

    int userInput() {
        int userInput;

        while (true) {
            if (scanner.hasNextInt()) {
                userInput = scanner.nextInt();
                scanner.nextLine();
                break;
            } else {
                scanner.nextLine();

            }
        }
        return userInput;
    }


    void startManager() {
        int userInput;
        String[] options = {
                "1 - Показать всё",
                "2 - добавить книжку",
                "3 - добавить магнитик",
                "4 - добавить одёжу",
                "5 - удалить какой-нибудь объект",
                "6 - удалить все",


                "8 - для возврата в меню",
                "9 - для выхода"
        };
        do {
            System.out.println("Выберите вариант: ");
            for (String option : options) {
                System.out.println(option);
            }
            userInput = scanner.nextInt();
            scanner.nextLine();
            processing(userInput);
        } while (userInput() != 9);
        System.out.println("Работа завершена.");
    }

    private void processing(int userInput) {

        switch (userInput) {
            case 1:
                showAnything();
                break;
            case 2:
                menuAddBook();
                break;
            case 3:
                menuAddMagnet();
                break;
            case 4:
                menuAddClothes();
                break;
            case 5:
                menuDelOneThing();
                break;
            case 6:
                menuDelAnything();
                break;
            case 8:
                break;
            case 9:
                return;

        }
    }

    void menuAddBook() {
        System.out.println("Введите серийник: ");
        long serial = scanner.nextLong();
        System.out.println("Введите место: ");
        String place = scanner.nextLine();
        System.out.println("Введите размер: ");
        String size = scanner.nextLine();
        manager.addBook(serial, place, size);
        System.out.println("Добавлено в библиотЭку");
    }

    void menuAddMagnet() {
        System.out.println("Введите откуда привезено: ");
        String country = scanner.nextLine();
        System.out.println("Введите место: ");
        String place = scanner.nextLine();
        System.out.println("Введите размер: ");
        String size = scanner.nextLine();
        manager.addMagnet(country, place, size);
        System.out.println("Повешено на холодос");
    }

    void menuAddClothes() {
        System.out.println("Введите размер одёжы: ");
        String ClothesSize = scanner.nextLine();
        System.out.println("Введите место: ");
        String place = scanner.nextLine();
        System.out.println("Введите размер: ");
        String size = scanner.nextLine();
        manager.addClothes(ClothesSize, place, size);
        System.out.println("Куда-то кинуто");
    }

    void menuDelOneThing() {
        System.out.println("Введите положение объекта для удаления: ");
        String place = scanner.nextLine();
        System.out.println("Введите размер объекта для удаления: ");
        String size = scanner.nextLine();
        manager.delThing(place, size);
    }

    void menuDelAnything() {
        for (Thing thing : manager.things) {
            manager.things.remove(thing);
        }
    }

    void showAnything() {
        for (Thing thing : manager.things) {
            System.out.println(thing);

        }
    }


}

package ThingManager;

public class Thing {
    String shelfPlace;                  //  Место на полке
    String thingSize;                      //  Размер вещи

    public Thing() {
    }

    public Thing(String Place, String Size) {
        this.shelfPlace = Place;
        this.thingSize = Size;
    }

    public String getShelfPlace() {
        return shelfPlace;
    }

    public void setShelfPlace(String shelfPlace) {
        this.shelfPlace = shelfPlace;
    }

    public String getThingSize() {
        return thingSize;
    }

    public void setThingSize(String thingSize) {
        this.thingSize = thingSize;
    }

    @Override
    public String toString() {
        return "Thing{" +
                "ShelfPlace='" + shelfPlace + '\'' +
                ", thingSize=" + thingSize +
                '}';
    }
}

Вопросы:

  1. почему не работает метод удаления ВСЕХ элементов коллекции void menuDelAnything() { класса Menu

Код ошибки:

   Exception in thread "main" java.util.ConcurrentModificationException
        at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)
        at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)
  1. Почему не работает метод удаления ОДНОГО предмета коллекции void menuDelOneThing() { класса Menu. Проверялось на manager.addBook(1,"q","w");

Ответы (0 шт):