Нужно описать динамическое создание ArrayList с разными именами,Java
не могу понять,как можно реализовать динамическое создание массива с разными именами.
Допустим у нас есть класс зоопарк(массив Zoo), в нём располагается произвольное число клеток(массив Cell) которое может содержать до 4-х животных(объект класса Animal) , при том что каждая клетка может докупаться. То есть при "покупке" клетки, она должна добавляться в массив Zoo с уникальным именем(Cell1,Cell2,Cell3 и тд) и при запросе мы можем обращаться к какой-то клетке и узнавать какие животные там сидят. Вот ТЗ:
Необходимо описать класс зоопарк.Предполагается что в нём расположено произвольное число клеток. В Зоопарке клетки могут докупаться. Каждая клетка может быть пустой или содержать до 4-х животных. У меня есть один кустарный метод,который можно реализовать как:у зоопарка уже есть 6 клеток, 3 разблокированы сразу, а ещё 3 надо докупить(без создания новых). Но хочется реализовать это более человечно, с созданием новых. Можете пожалуйста помочь,я новичок в этом деле,поэтому не особо понимаю,как это сделать.
Ответы (1 шт):
Сам ArrayList не содержит никаких имен. Если вопрос только в том, чтобы сгенерировать имя для поля в классе Cell, то это можно сделать в методе добавления любым удобным способом.
К примеру добавить метод покупки клетки buyCell:
public class Main {
@Data class Cell {
@NonNull private String name;
}
@Data class Zoo {
private List<Cell> cells = new ArrayList<>();
public void buyCell() {
cells.add(new Cell("Cell" + (cells.size() + 1)));
}
}
public void run() {
Zoo zoo = new Zoo();
zoo.buyCell();
zoo.buyCell();
zoo.buyCell();
System.out.println(zoo);
// Вывод: Main.Zoo(cells=[Main.Cell(name=Cell1), Main.Cell(name=Cell2), Main.Cell(name=Cell3)])
}
public static void main(String[] args) { new Main().run(); }
}
P.S.> аннотации @Data, @NonNull от библиотеки Lombok позволяют не писать геттеры, сеттеры, конструктор в классе Cell и методы toString для печати. Они не особо важны, главное продемонстрировано в методе buyCell cells.add(new Cell("Cell" + (cells.size() + 1)));.