Advertisement
Egor_Vakar

(Java) lab 5.2 Main

Mar 21st, 2022
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.98 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.Scanner;
  3. import java.util.regex.PatternSyntaxException;
  4.  
  5. public class lab5_2 {
  6.  
  7.     private static final Scanner scan = new Scanner(System.in);
  8.     private static final int MIN_VALUE = 0;
  9.     private static final int MAX_VALUE = 999;
  10.     private static Tree tree = new Tree();
  11.  
  12.     public static void main(String[] args) {
  13.         printHi();
  14.         showMenu();
  15.     }
  16.  
  17.     static void printHi() {
  18.         System.out.println("\n\n      Лабораторная работа 5.2 Вакаря Егора      \nЭта программа создана для работы с бинарным деревом\n");
  19.     }
  20.  
  21.     static void showMenu() {
  22.         int input;
  23.         do {
  24.             System.out.print("|||МЕНЮ|||\n1. Создать новое дерево.\n2. Добавить элемент.\n3. Удалить элемент.\n4. Показать дерево.\n5. Отразить дерево зеркально относительно длиннейшего пути.\n6. Считать дерево из файла.\n7. Сохранить дерево в файл.\n0. Выход из программы.\nВыберите пункт меню: ");
  25.             input = takeInt(0, 7);
  26.             userChoice(input);
  27.         } while (input != 0);
  28.  
  29.     }
  30.  
  31.     private static int takeInt(int min, int max) {
  32.         int num = 0;
  33.  
  34.         boolean isInCorrect;
  35.         do {
  36.             isInCorrect = false;
  37.  
  38.             try {
  39.                 num = Integer.parseInt(scan.nextLine());
  40.             } catch (NumberFormatException e) {
  41.                 System.out.print("\n|||Ошибка!|||\n Введите число повторно: ");
  42.                 isInCorrect = true;
  43.             }
  44.  
  45.             if (!isInCorrect && (num < min || num > max)) {
  46.                 System.out.print("\n|||Ошибка!|||\n Введите число из диапазона(" + min + ".." + max + "): ");
  47.                 isInCorrect = true;
  48.             }
  49.         } while (isInCorrect);
  50.         return num;
  51.     }
  52.  
  53.     private static int takeIntForDeleting() {
  54.         int num = 0;
  55.         int counter = 0;
  56.         String[] arr = Tree.result.split(" ");
  57.         boolean isInCorrect;
  58.  
  59.         do {
  60.             isInCorrect = false;
  61.  
  62.             try {
  63.                 num = Integer.parseInt(scan.nextLine());
  64.             } catch (NumberFormatException e) {
  65.                 System.out.print("\n|||Ошибка!|||\n Введите число повторно: ");
  66.                 isInCorrect = true;
  67.             }
  68.  
  69.             if (!isInCorrect && (num < MIN_VALUE || num > MAX_VALUE)) {
  70.                 System.out.print("\n|||Ошибка!|||\n Введите число из диапазона(" + MIN_VALUE + ".." + MAX_VALUE + "): ");
  71.                 isInCorrect = true;
  72.             }
  73.  
  74.             if (!isInCorrect) {
  75.                 for (int i = 0; i < arr.length; i++) {
  76.                     if (num != Integer.parseInt(arr[i])) {
  77.                         counter++;
  78.                     }
  79.                 }
  80.                 if (counter == arr.length) {
  81.                     System.out.print("\n|||Ошибка!|||\n Введите число из указанных(");
  82.                     for (int i = 0; i < arr.length - 1; i++) {
  83.                         System.out.print(arr[i] + ", ");
  84.                     }
  85.                     System.out.print(arr[arr.length - 1] + "): ");
  86.                     isInCorrect = true;
  87.                 }
  88.             }
  89.  
  90.         } while (isInCorrect);
  91.         System.out.println("\n|||Элемент успешно удален из дерева|||\n");
  92.  
  93.         return num;
  94.     }
  95.  
  96.     static void userChoice(int input) {
  97.         switch (input) {
  98.             case 0:
  99.                 System.out.println("Работа программы завершена");
  100.                 break;
  101.             case 1:
  102.                 tree.createTree();
  103.                 System.out.println("\n|||ДЕРЕВО СОЗДАНО|||\n");
  104.                 break;
  105.             case 2:
  106.                 if (tree == null) {
  107.                     System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ДОБАВЛЕНИЕ ЭЛЕМЕНТА НЕВОЗМОЖНО|||\n");
  108.                 } else {
  109.                     addElement();
  110.                 }
  111.                 break;
  112.             case 3:
  113.                 if (tree == null) {
  114.                     System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! УДАЛЕНИЕ ЭЛЕМЕНТА НЕВОЗМОЖНО|||\n");
  115.                 } else {
  116.                     if (tree.getRootNode() == null) {
  117.                         System.out.println("\n|||ДЕРЕВО ПУСТО! УДАЛЕНИЕ НЕВОЗМОЖНО|||\n");
  118.                     } else {
  119.                         deleteElement();
  120.                     }
  121.                 }
  122.                 break;
  123.             case 4:
  124.                 if (tree == null) {
  125.                     System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ВЫВОД НА ЭКРАН НЕВОЗМОЖЕН|||\n");
  126.                 } else {
  127.                     if (tree.getRootNode() == null) {
  128.                         System.out.println("\n|||ДЕРЕВО ПУСТО! ВЫВОД НА ЭКРАН НЕВОЗМОЖЕН|||\n");
  129.                     } else {
  130.                         System.out.println("\n|||ДЕРЕВО:|||\n" + tree.printTree() + "\n");
  131.                     }
  132.                 }
  133.                 break;
  134.             case 5:
  135.                 if (tree == null) {
  136.                     System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ДЕЙСТВИЕ НЕВОЗМОЖНО|||\n");
  137.                 } else {
  138.                     if (tree.getRootNode() == null) {
  139.                         System.out.println("\n|||ДЕРЕВО ПУСТО! ДЕЙСТВИЕ НЕВОЗМОЖНО|||\n");
  140.                     } else {
  141.                         String mirrorTree = tree.mirrorTree();
  142.                         System.out.println("\n|||ОТРАЖЁННОЕ ДЕРЕВО|||\n" + mirrorTree + "\n");
  143.                     }
  144.                 }
  145.                 break;
  146.             case 6:
  147.                 if (tree == null) {
  148.                     System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ЧТЕНИЕ ИЗ ФАЙЛА НЕВОЗМОЖНО|||\n");
  149.                 } else {
  150.                     readListFromFile();
  151.                 }
  152.                 break;
  153.             case 7:
  154.                 if (tree == null) {
  155.                     System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! СОХРАНЕНИЕ В ФАЙЛ НЕВОЗМОЖНО|||\n");
  156.                 } else {
  157.                     if (tree.getRootNode() == null) {
  158.                         System.out.println("\n|||ДЕРЕВО ПУСТО! СОХРАНЕНИЕ В ФАЙЛ НЕВОЗМОЖНО|||\n");
  159.                     } else {
  160.                         saveTreeToFile();
  161.                     }
  162.                 }
  163.         }
  164.     }
  165.  
  166.     private static void readListFromFile() {
  167.         String path = takeInPath();
  168.         final int MIN_SIZE = 1;
  169.         int lineCounter = 0;
  170.         final int TREE_LINE_NUMBER = 1;
  171.         String line;
  172.         String[] listString = null;
  173.         boolean isCorrect = true;
  174.         try {
  175.             BufferedReader reader = new BufferedReader(new FileReader(path));
  176.             while ((isCorrect) && ((line = reader.readLine()) != null)) {
  177.                 lineCounter++;
  178.                 if (lineCounter == TREE_LINE_NUMBER) {
  179.                     try {
  180.                         listString = line.split(" ");
  181.                     } catch (PatternSyntaxException e) {
  182.                         System.out.println("\n|||НЕКОРЕТНЫЕ ДАННЫЕ В ФАЙЛЕ! ОШИБКА В СТРОКЕ СПИСКА!|||\n");
  183.                         isCorrect = false;
  184.                     }
  185.                 }
  186.             }
  187.             reader.close();
  188.         } catch (IOException e) {
  189.             System.out.println("\n|||ОШИБКА ВВОДА/ВЫВОДА!|||\n");
  190.             isCorrect = false;
  191.         }
  192.         assert listString != null;
  193.         Integer[] treeElements = new Integer[listString.length];
  194.         int i = 0;
  195.         while (isCorrect && (i < listString.length)) {
  196.             try {
  197.                 treeElements[i] = Integer.parseInt(listString[i]);
  198.             }
  199.             catch (NumberFormatException e){
  200.                 isCorrect = false;
  201.             }
  202.             i++;
  203.         }
  204.  
  205.         if (isCorrect && lineCounter > TREE_LINE_NUMBER) {
  206.             System.out.println("\n|||НЕКОРЕТНЫЕ ДАННЫЕ В ФАЙЛЕ!|||\n");
  207.             isCorrect = false;
  208.         } else {
  209.             for (i = 0; i < treeElements.length; i++) {
  210.                 tree.addNode(treeElements[i]);
  211.             }
  212.         }
  213.         if (isCorrect) {
  214.             System.out.println("\n|||СПИСОК УСПЕШНО СЧИТАН|||\n");
  215.         }
  216.     }
  217.  
  218.     private static void deleteElement() {
  219.         System.out.println("\n|||УДАЛЕНИЕ ЭЛЕМЕНТА|||\n");
  220.         System.out.print("Введите номер элемента, который хотите удалить (");
  221.         Tree.result = "";
  222.         String[] treeStr = Tree.getAllKeys(Tree.rootNode).split(" ");
  223.         if (treeStr.length > 1) {
  224.             for (int i = 0; i < treeStr.length - 1; i++) {
  225.                 System.out.print(treeStr[i] + ", ");
  226.             }
  227.             System.out.print(treeStr[treeStr.length - 1] + "): ");
  228.         } else {
  229.             System.out.print(treeStr[treeStr.length - 1] + "): ");
  230.         }
  231.         int value = takeIntForDeleting();
  232.         tree.deleteNode(value);
  233.     }
  234.  
  235.     private static void addElement() {
  236.         System.out.println("\n|||ДОБАВЛЕНИЕ ЭЛЕМЕНТА|||\n");
  237.         System.out.print("Введите элемент: ");
  238.         tree.addNode(takeInt(MIN_VALUE, MAX_VALUE));
  239.         System.out.println("\n|||ЭЛЕМЕНТ ДОБАВЛЕН|||\n");
  240.     }
  241.  
  242.     static void saveTreeToFile() {
  243.         String path = takeOutPath();
  244.         try {
  245.             BufferedWriter writer = new BufferedWriter(new FileWriter(path));
  246.             try {
  247.                 writer.write(tree.printTree());
  248.                 System.out.println("\n|||ДЕРЕВО УСПЕШНО СОХРАНЕНО В ФАЙЛ|||\n");
  249.             } catch (Throwable var5) {
  250.                 try {
  251.                     writer.close();
  252.                 } catch (Throwable var4) {
  253.                     var5.addSuppressed(var4);
  254.                 }
  255.                 throw var5;
  256.             }
  257.             writer.close();
  258.         } catch (IOException var6) {
  259.             System.out.println("\n|||ОШИБКА ДОСТУПА|||\n");
  260.         }
  261.     }
  262.  
  263.     static String takeInPath() {
  264.         String path;
  265.         boolean isIncorrect;
  266.         System.out.print("\nВведите адрес файла: ");
  267.         do {
  268.             isIncorrect = false;
  269.             path = scan.nextLine();
  270.             File file = new File(path);
  271.             if (!file.exists()) {
  272.                 System.out.print("\n|||ОШИБКА|||\nФайл не найден\nВведите адрес файла: ");
  273.                 isIncorrect = true;
  274.             }
  275.             if (!isIncorrect && (!path.endsWith(".txt"))) {
  276.                 System.out.print("\n|||ОШИБКА|||\nФайл найден, но это не \".txt\" файл\nВведите адрес файла: ");
  277.                 isIncorrect = true;
  278.             }
  279.         } while (isIncorrect);
  280.         return path;
  281.     }
  282.  
  283.     static String takeOutPath() {
  284.         String path;
  285.         boolean isIncorrect;
  286.         System.out.print("\nВведите адрес файла: ");
  287.         do {
  288.             isIncorrect = false;
  289.             path = scan.nextLine();
  290.             if (!path.endsWith(".txt")) {
  291.                 System.out.print("\n|||ОШИБКА|||\nЭто должен быть \".txt\" файл\nВведите адрес файла: ");
  292.                 isIncorrect = true;
  293.             }
  294.         } while (isIncorrect);
  295.         return path;
  296.     }
  297. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement