Сначала инициализируйте inventory, затем увеличьте стоимость каждого входящего компьютера в 1,1 раза и добавьте его. Условие предполагает изменение переданных объектов, а не их копирование.
Реализация метода покупки компьютеров
Сначала инициализируйте inventory, затем увеличьте стоимость каждого входящего компьютера в 1,1 раза и добавьте его. Условие предполагает изменение переданных объектов, а не их копирование.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать метод buyComputers. Он принимает список объектов Computer. При добавлении каждый компьютер должен подорожать на 10 %, после чего все компьютеры сохраняются во внутреннем списке inventory класса ComputerShop.
public class Computer {
private double cost;
public Computer(float cost) {
this.cost = cost;
}
public void start() {
System.out.println("Компьютер включен");
}
public void setCost(double cost) {
this.cost = cost;
}
public double getCost() {
return cost;
}
}
public class ComputerShop {
private List<Computer> inventory;
public void buyComputers(List<Computer> incoming) {
// реализация будет увеличивать цену каждого компьютера на 10% и добавлять в inventory
}
public Computer sellComputer() {
if (inventory.size() == 0) {
throw new RuntimeException("Компьютеры проданы!");
}
return inventory.remove(0);
}
}
Ответ
Сначала инициализируйте inventory, затем увеличьте стоимость каждого входящего компьютера в 1,1 раза и добавьте его. Условие предполагает изменение переданных объектов, а не их копирование.
private final List<Computer> inventory = new ArrayList<>();
public void buyComputers(List<Computer> incoming) {
java.util.Objects.requireNonNull(incoming);
incoming.forEach(java.util.Objects::requireNonNull);
for (Computer computer : incoming) {
computer.setCost(computer.getCost() * 1.1);
inventory.add(computer);
}
}
Повторная передача того же объекта снова повысит его цену; при необходимости запретите дубликаты отдельным правилом. Для настоящих денежных расчётов предпочтительнее BigDecimal или целые минимальные единицы с явным округлением. Потокобезопасность здесь не заявляется.