Есть некоторая коллекция(исходник: Проблема с удалением переменных классов потомков):
public class Manager {
String place;
String size;
ArrayList<Thing> things;
public class Thing {
String shelfPlace; // Место на полке
String thingSize; // Размер вещи
Есть реализованный метод. Метод через FOREACH:
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;
}
}
}
ВОПРОС: Как реализовать его через FORi ?
Непонятно какая структура получится при выводе и шаг итерации. Вот что есть:
void delThing(String place, String size) {
for (int i = things.size() - 1; i >= 0; i--) {
if ((place.equals(things.get(i))) && (size.equals(things.get(i)))) { //непонятно что из себя представляет массив и с каким элекментом работатью.
things.remove(things.get(i));
System.out.println("Что-то там удалено");
break;
} else {
System.out.println("Нет такого.");
break;
}
}
}
В попытке вывести код через sout, получил:
Exception in thread "main" java.lang.ArrayStoreException: arraycopy: element type mismatch: can not cast one of the elements of java.lang.Object[] to the type of the destination array, java.lang.String
at java.base/java.lang.System.arraycopy(Native Method)
at java.base/java.util.ArrayList.toArray(ArrayList.java:401)
at ThingManager.Manager.delThing(Manager.java:40)
Вот перевод ошибки (вольный):
element type mismatch: can not cast one of the elements of java.lang.Object[] to the type of the destination array, java.lang.String
несоответствуют типы: нельзя привести один из элементов массива к типу целевого массива
Если брать именно код который приводит к ошибке и разобрать его:
for (int i = things.size() - 1; i >= 0; i--) {
if ((place.equals(things.get(i))) && (size.equals(things.get(i)))) {
....
}
По поводу самого порядка перебора сказать ничего не могу, вам виднее как это делать. Я только укажу на проблему из-за которой походу все падает:
если(место(String).соответствует(массив объектов класса(Thing).взять(элемент i)) и размер(String).соответствует(массив объектов класса(Thing).взять(элемент i)))
то есть по факту вы пытаетесь сравнить класс со строкой, а это как-бы не очень правильно. В вашем массиве реализуйте взятие элемента из массива:
for (int i = things.size() - 1; i >= 0; i--) {
Thing thing = things.get(i);
if ((place.equals(thing.getshelfPlace())) && (size.equals(things.get thingSize()))) {
things.remove(things.get(i));
System.out.println("Что-то там удалено");
break;
} else {
System.out.println("Нет такого.");
break;
}
}
думаю после этого исправления ошибка пропадёт. И добавьте больше уточняющей информации в вопрос пожалуйста.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Помогите реализовать задачу, иметься таблица в базе данных
Учу sql заново, и у меня возник вопрос зачем вообще нужны джоиныОбъеденить таблицы ведь можно с помощью фореина и праймари ключей в таблицах...
Есть ардуина и подключенный к ней датчик (какой, роли не играет) он подает данные на ардуино, а она соответственно на пкМне нужно написать...