Java · 35 строк
У клиента в среднем 4 автоплатежа: связь, ЖКХ, интернет, детский сад. Список читают приложение и планировщик списаний, новые автоплатежи добавляются из другого потока.
Отметьте строки с ошибками.
В работе: Сервис автоплатежей, экран «Скоро спишется» и ночная чистка.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 2 вопроса про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Сбера: автоплатежи клиента. Условие пересказано своими словами.
Давали на собеседовании?
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class AutopayService {record Autopay(long id, String payee, long amountRub, boolean cancelled) {}private final List<Autopay> autopays =Collections.synchronizedList(new ArrayList<>());public void add(Autopay a) {autopays.add(a);}// Чистка отменённых, раз в сутки.public void purgeCancelled() {for (Autopay a : autopays) {if (a.cancelled()) {autopays.remove(a);}}}// Сумма списаний на 25-е число для экрана «Скоро спишется».public long monthlyTotal() {long sum = 0;for (Autopay a : autopays) {if (!a.cancelled()) {sum += a.amountRub();}}return sum;}}