Загрузка данных


package lab14_4;

public class Main {
    public static void main(String[] args) {
        Utils utils = new Utils();
        Ochered queue = null;
        Ochered queue2 = null;
        Stack stack = null;

        while (true) {
            System.out.println("Выберите тип структуры:\n1 - Очередь\n2 - Стек\n0 - Выход\nВаш выбор:");
            int vibor = utils.safeIntInput();

            mainChoice:
            switch (vibor) {
                case 1: {
                    int size;
                    while (true) {
                        System.out.println("Укажите размер очереди");
                        size = utils.safeIntInput();

                        if (size < 1) System.out.println("Количество элементов должно быть положительным.");
                        else break;
                    }

                    do {
                        System.out.println("Выберите тип очереди:\n1 - Фиксированная\n2 - Кольцевая\n3 - Динамическая\n4 - Кольцевая-динамическая\n0 - Назад\nВаш выбор:");
                        int choice = utils.safeIntInput();
                        switch (choice) {
                            case 1:
                                queue = new FixOchered(size);
                                queue2 = new FixOchered(size);
                                break;
                            case 2:
                                queue = new KoltOchered(size);
                                queue2 = new KoltOchered(size);
                                break;
                            case 3:
                                queue = new DinamOchered(size);
                                queue2 = new DinamOchered(size);
                                break;
                            case 4:
                                queue = new KoltDinamOchered(size);
                                queue2 = new KoltDinamOchered(size);
                                break;
                            case 0:
                                break mainChoice;
                            default:
                                System.out.println("Ошибка! Некорректный выбор типа очереди.");
                        }
                    } while (queue == null && queue2 == null);

                    loop:
                    do {
                        System.out.println("\nВыберите действие:");
                        System.out.println("1 - Вывод на экран");
                        System.out.println("2 - Добавить элемент");
                        System.out.println("3 - Извлечь элемент");
                        System.out.println("4 - Сброс очереди");
                        System.out.println("5 - Копирование очереди");
                        System.out.println("6 - Вывод скопированной очереди");
                        System.out.println("7 - Извлечение из скопированной очереди");
                        System.out.println("0 - Назад");
                        System.out.print("Ваш выбор: ");
                        int viborDeystviya1 = utils.safeIntInput();
                        switch (viborDeystviya1) {
                            case 1:
                                queue.printElement();
                                break;
                            case 2:
                                System.out.println("Введите элемент");
                                System.out.print("Введите новый элемент: ");
                                double newElement = utils.safeDoubleInput();
                                queue.put(newElement);
                                break;
                            case 3:
                                queue.get();
                                break;
                            case 4:
                                queue.reset();
                                System.out.println("Очередь успешно сброшена");
                                break;
                            case 5:
                                Ochered.copy(queue, queue2);
                                System.out.println("Очередь успешно скопирована");
                                break;
                            case 6:
                                queue2.printElement();
                                break;
                            case 7:
                                queue2.get();
                                break;
                            case 0:
                                break loop;
                        }
                    } while (true);

                    break;
                }
                case 2:
                    int sizeStack;
                    while (true) {
                        System.out.println("Укажите размер стека");
                        sizeStack = utils.safeIntInput();
                        if (sizeStack < 1) {
                            System.out.println("Количество элементов должно быть положительным.");
                        } else break;
                    }
                    boolean flagStack = true;
                    while (flagStack) {
                        System.out.println("Выберите тип стека:\n1 - Фиксированный\n2 - Кольцевой\n3 - Динамический\n4 - Кольцевой-динамический\n0 - Назад\nВаш выбор:");
                        int choiceStack = utils.safeIntInput();
                        switch (choiceStack) {
                            case 1:
                                stack = new FixStack(sizeStack);
                                break;
                            case 2:
                                stack = new KolStack(sizeStack);
                                break;
                            case 3:
                                stack = new DinamStack(sizeStack);
                                break;
                            case 4:
                                stack = new KolDinStack(sizeStack);
                                break;
                            case 0:
                                flagStack = false;
                                continue;
                            default:
                                System.out.println("Ошибка! Некорректный выбор типа стека.");
                                break;
                        }
                        boolean flag1Stack = true;
                        while (flag1Stack) {
                            System.out.println("\nВыберите действие:");
                            System.out.println("1 - Вывод на экран");
                            System.out.println("2 - Добавить элемент");
                            System.out.println("3 - Извлечь элемент");
                            System.out.println("4 - Сброс стека");
                            System.out.println("0 - Назад");
                            System.out.print("Ваш выбор: ");
                            int viborDeystviya2 = utils.safeIntInput();
                            switch (viborDeystviya2) {
                                case 1:
                                    stack.printElement();
                                    break;
                                case 2:
                                    System.out.println("Введите элемент");
                                    System.out.print("Введите новый элемент: ");
                                    int newEl = utils.safeIntInput();
                                    stack.push(newEl);
                                    break;
                                case 3:
                                    stack.pop();
                                    break;
                                case 4:
                                    stack.reset();
                                    System.out.println("Стек успешно сброшен");
                                    break;
                                case 0:
                                    flag1Stack = false;
                                    break;
                            }
                        }
                    }
                    break;
                case 0:
                    return;
            }
        }
    }
}