package ru.kamask.pet; import java.util.Scanner; public class TodoApp { private static Task[] tasks = new Task[10]; private static int nextTaskId = 1; private static int tasksCounter = 0; private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { displayMainMenu(); } public static int requestIntFromInput(String template, int[] allowedInts) { do { System.out.print(template); int input; do { if (scanner.hasNextInt()) { input = scanner.nextInt(); scanner.nextLine(); break; } else { scanner.next(); System.out.print("Ошибка: используйте цифры.\nПовторите ввод:"); } } while (true); for (int i : allowedInts) if (i == input) return input; System.out.print("Ошибка: укажите номер выбранного пункта.\nПовторите ввод:"); } while (true); } public static void displayMainMenu() { while (true) { String menu = """ ┌──────────────────────────┐ | [1] Добавить дело | | [2] Список дел | | | | [0] Выйти из программы | └──────────────────────────┘ Введите номер пункта меню:"""; switch (requestIntFromInput(menu, new int[] { 0, 1, 2 })) { case 1 -> displayCreateTask(); case 2 -> displayTasks(); case 0 -> { scanner.close(); System.exit(0); } } } } private static void displayCreateTask() { if (tasksCounter >= 9) { System.out.println("\nОшибка: Достигнут лимит в 10 дел.\n"); return; } int id = nextTaskId++; String title; String description; do { System.out.print("\nНпишите название дела (3–20 символов): "); title = scanner.nextLine().trim(); if (title.length() >= 3 && title.length() <= 20) break; System.out.print("\nОшибка: Название должно содержать от 3 до 20 символов.\nПопробуйте снова: "); } while (true); System.out.print("\nНпишите описание дела: "); description = scanner.nextLine().trim(); var task = new Task(id, title, description); tasks[tasksCounter++] = task; } private static void displayTasks() { if (tasksCounter < 1) { int input = requestIntFromInput(""" Список дел пуст. [1] Добавить дело [0] Выйти из программы Введите номер пункта:""", new int[] { 0, 1 }); if (input == 1) { displayCreateTask(); displayTasks(); } else System.exit(0); } int[] tasksIDs = new int[tasksCounter + 1]; System.out.println(""" Список дел: """); for (int i = 0; i < tasksCounter; i++) { tasks[i].printInfo(); tasksIDs[i] = tasks[i].getId(); } tasksIDs[tasksCounter] = 0; int input = requestIntFromInput(""" Введите номер дела или 0 для возврата в меню:""", tasksIDs); if (input == 0) return; displayTask(getTaskById(input)); } public static Task getTaskById(int id) { for (int i = 0; i < tasksCounter; i++) { if (tasks[i].getId() == id) return tasks[i]; } return null; } public static void displayTask(Task task) { task.printInfo(true); String firstOption = task.getCompleted() ? "[1]Не выполнено" : "[1]Выполнено"; int input = requestIntFromInput(firstOption + " [0]Главное меню\n\nВвод:", new int[] { 0, 1 }); if (input == 1) { task.toggleCompleted(); displayTask(task); } } }