Прототип кода - Проблема с циклом 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 +
'}';
}
}
Вопросы:
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)
void menuDelOneThing() {
класса Menu.
Проверялось на
manager.addBook(1,"q","w");Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть две сущности: Customer и CustomerOrderЗависимость между ними One-to-Many
Мне нужно получить ширину и высоту экрана на устройстве, на котором сейчас выполняется приложениеКак мне это сделать?
Как мне дождаться выполнение асинхронного метода? Есть такой метод ServergetData(DataListener listener); Данные загружаются в отдельном потоке, и по завершению...