Реализация метода покупки компьютеров

Сначала инициализируйте 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 или целые минимальные единицы с явным округлением. Потокобезопасность здесь не заявляется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее