Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.Scanner;
- import java.util.regex.PatternSyntaxException;
- public class lab5_2 {
- private static final Scanner scan = new Scanner(System.in);
- private static final int MIN_VALUE = 0;
- private static final int MAX_VALUE = 999;
- private static Tree tree = new Tree();
- public static void main(String[] args) {
- printHi();
- showMenu();
- }
- static void printHi() {
- System.out.println("\n\n Лабораторная работа 5.2 Вакаря Егора \nЭта программа создана для работы с бинарным деревом\n");
- }
- static void showMenu() {
- int input;
- do {
- System.out.print("|||МЕНЮ|||\n1. Создать новое дерево.\n2. Добавить элемент.\n3. Удалить элемент.\n4. Показать дерево.\n5. Отразить дерево зеркально относительно длиннейшего пути.\n6. Считать дерево из файла.\n7. Сохранить дерево в файл.\n0. Выход из программы.\nВыберите пункт меню: ");
- input = takeInt(0, 7);
- userChoice(input);
- } while (input != 0);
- }
- private static int takeInt(int min, int max) {
- int num = 0;
- boolean isInCorrect;
- do {
- isInCorrect = false;
- try {
- num = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.print("\n|||Ошибка!|||\n Введите число повторно: ");
- isInCorrect = true;
- }
- if (!isInCorrect && (num < min || num > max)) {
- System.out.print("\n|||Ошибка!|||\n Введите число из диапазона(" + min + ".." + max + "): ");
- isInCorrect = true;
- }
- } while (isInCorrect);
- return num;
- }
- private static int takeIntForDeleting() {
- int num = 0;
- int counter = 0;
- String[] arr = Tree.result.split(" ");
- boolean isInCorrect;
- do {
- isInCorrect = false;
- try {
- num = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.print("\n|||Ошибка!|||\n Введите число повторно: ");
- isInCorrect = true;
- }
- if (!isInCorrect && (num < MIN_VALUE || num > MAX_VALUE)) {
- System.out.print("\n|||Ошибка!|||\n Введите число из диапазона(" + MIN_VALUE + ".." + MAX_VALUE + "): ");
- isInCorrect = true;
- }
- if (!isInCorrect) {
- for (int i = 0; i < arr.length; i++) {
- if (num != Integer.parseInt(arr[i])) {
- counter++;
- }
- }
- if (counter == arr.length) {
- System.out.print("\n|||Ошибка!|||\n Введите число из указанных(");
- for (int i = 0; i < arr.length - 1; i++) {
- System.out.print(arr[i] + ", ");
- }
- System.out.print(arr[arr.length - 1] + "): ");
- isInCorrect = true;
- }
- }
- } while (isInCorrect);
- System.out.println("\n|||Элемент успешно удален из дерева|||\n");
- return num;
- }
- static void userChoice(int input) {
- switch (input) {
- case 0:
- System.out.println("Работа программы завершена");
- break;
- case 1:
- tree.createTree();
- System.out.println("\n|||ДЕРЕВО СОЗДАНО|||\n");
- break;
- case 2:
- if (tree == null) {
- System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ДОБАВЛЕНИЕ ЭЛЕМЕНТА НЕВОЗМОЖНО|||\n");
- } else {
- addElement();
- }
- break;
- case 3:
- if (tree == null) {
- System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! УДАЛЕНИЕ ЭЛЕМЕНТА НЕВОЗМОЖНО|||\n");
- } else {
- if (tree.getRootNode() == null) {
- System.out.println("\n|||ДЕРЕВО ПУСТО! УДАЛЕНИЕ НЕВОЗМОЖНО|||\n");
- } else {
- deleteElement();
- }
- }
- break;
- case 4:
- if (tree == null) {
- System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ВЫВОД НА ЭКРАН НЕВОЗМОЖЕН|||\n");
- } else {
- if (tree.getRootNode() == null) {
- System.out.println("\n|||ДЕРЕВО ПУСТО! ВЫВОД НА ЭКРАН НЕВОЗМОЖЕН|||\n");
- } else {
- System.out.println("\n|||ДЕРЕВО:|||\n" + tree.printTree() + "\n");
- }
- }
- break;
- case 5:
- if (tree == null) {
- System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ДЕЙСТВИЕ НЕВОЗМОЖНО|||\n");
- } else {
- if (tree.getRootNode() == null) {
- System.out.println("\n|||ДЕРЕВО ПУСТО! ДЕЙСТВИЕ НЕВОЗМОЖНО|||\n");
- } else {
- String mirrorTree = tree.mirrorTree();
- System.out.println("\n|||ОТРАЖЁННОЕ ДЕРЕВО|||\n" + mirrorTree + "\n");
- }
- }
- break;
- case 6:
- if (tree == null) {
- System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! ЧТЕНИЕ ИЗ ФАЙЛА НЕВОЗМОЖНО|||\n");
- } else {
- readListFromFile();
- }
- break;
- case 7:
- if (tree == null) {
- System.out.println("\n|||ДЕРЕВО НЕ СОЗДАНО! СОХРАНЕНИЕ В ФАЙЛ НЕВОЗМОЖНО|||\n");
- } else {
- if (tree.getRootNode() == null) {
- System.out.println("\n|||ДЕРЕВО ПУСТО! СОХРАНЕНИЕ В ФАЙЛ НЕВОЗМОЖНО|||\n");
- } else {
- saveTreeToFile();
- }
- }
- }
- }
- private static void readListFromFile() {
- String path = takeInPath();
- final int MIN_SIZE = 1;
- int lineCounter = 0;
- final int TREE_LINE_NUMBER = 1;
- String line;
- String[] listString = null;
- boolean isCorrect = true;
- try {
- BufferedReader reader = new BufferedReader(new FileReader(path));
- while ((isCorrect) && ((line = reader.readLine()) != null)) {
- lineCounter++;
- if (lineCounter == TREE_LINE_NUMBER) {
- try {
- listString = line.split(" ");
- } catch (PatternSyntaxException e) {
- System.out.println("\n|||НЕКОРЕТНЫЕ ДАННЫЕ В ФАЙЛЕ! ОШИБКА В СТРОКЕ СПИСКА!|||\n");
- isCorrect = false;
- }
- }
- }
- reader.close();
- } catch (IOException e) {
- System.out.println("\n|||ОШИБКА ВВОДА/ВЫВОДА!|||\n");
- isCorrect = false;
- }
- assert listString != null;
- Integer[] treeElements = new Integer[listString.length];
- int i = 0;
- while (isCorrect && (i < listString.length)) {
- try {
- treeElements[i] = Integer.parseInt(listString[i]);
- }
- catch (NumberFormatException e){
- isCorrect = false;
- }
- i++;
- }
- if (isCorrect && lineCounter > TREE_LINE_NUMBER) {
- System.out.println("\n|||НЕКОРЕТНЫЕ ДАННЫЕ В ФАЙЛЕ!|||\n");
- isCorrect = false;
- } else {
- for (i = 0; i < treeElements.length; i++) {
- tree.addNode(treeElements[i]);
- }
- }
- if (isCorrect) {
- System.out.println("\n|||СПИСОК УСПЕШНО СЧИТАН|||\n");
- }
- }
- private static void deleteElement() {
- System.out.println("\n|||УДАЛЕНИЕ ЭЛЕМЕНТА|||\n");
- System.out.print("Введите номер элемента, который хотите удалить (");
- Tree.result = "";
- String[] treeStr = Tree.getAllKeys(Tree.rootNode).split(" ");
- if (treeStr.length > 1) {
- for (int i = 0; i < treeStr.length - 1; i++) {
- System.out.print(treeStr[i] + ", ");
- }
- System.out.print(treeStr[treeStr.length - 1] + "): ");
- } else {
- System.out.print(treeStr[treeStr.length - 1] + "): ");
- }
- int value = takeIntForDeleting();
- tree.deleteNode(value);
- }
- private static void addElement() {
- System.out.println("\n|||ДОБАВЛЕНИЕ ЭЛЕМЕНТА|||\n");
- System.out.print("Введите элемент: ");
- tree.addNode(takeInt(MIN_VALUE, MAX_VALUE));
- System.out.println("\n|||ЭЛЕМЕНТ ДОБАВЛЕН|||\n");
- }
- static void saveTreeToFile() {
- String path = takeOutPath();
- try {
- BufferedWriter writer = new BufferedWriter(new FileWriter(path));
- try {
- writer.write(tree.printTree());
- System.out.println("\n|||ДЕРЕВО УСПЕШНО СОХРАНЕНО В ФАЙЛ|||\n");
- } catch (Throwable var5) {
- try {
- writer.close();
- } catch (Throwable var4) {
- var5.addSuppressed(var4);
- }
- throw var5;
- }
- writer.close();
- } catch (IOException var6) {
- System.out.println("\n|||ОШИБКА ДОСТУПА|||\n");
- }
- }
- static String takeInPath() {
- String path;
- boolean isIncorrect;
- System.out.print("\nВведите адрес файла: ");
- do {
- isIncorrect = false;
- path = scan.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.print("\n|||ОШИБКА|||\nФайл не найден\nВведите адрес файла: ");
- isIncorrect = true;
- }
- if (!isIncorrect && (!path.endsWith(".txt"))) {
- System.out.print("\n|||ОШИБКА|||\nФайл найден, но это не \".txt\" файл\nВведите адрес файла: ");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- static String takeOutPath() {
- String path;
- boolean isIncorrect;
- System.out.print("\nВведите адрес файла: ");
- do {
- isIncorrect = false;
- path = scan.nextLine();
- if (!path.endsWith(".txt")) {
- System.out.print("\n|||ОШИБКА|||\nЭто должен быть \".txt\" файл\nВведите адрес файла: ");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement