Advertisement
Ewerlost

Lab5.1

Mar 23rd, 2024 (edited)
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.79 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.Scanner;
  6.  
  7. public class Main {
  8.  
  9.     public static class ListElem {
  10.         private static class Node {
  11.             public Integer value;
  12.             public Node next, prev ;
  13.  
  14.             public Node(Integer newValue){
  15.                 this.value = newValue;
  16.                 this.next = null;
  17.                 this.prev = null;
  18.             }
  19.         }
  20.         public Integer size;
  21.         public Node head;
  22.  
  23.         public ListElem() {
  24.             this.head = null;
  25.             this.size = 0;
  26.         }
  27.  
  28.         public int size() {
  29.             return size;
  30.         }
  31.  
  32.         public void insert(Integer newValue) {
  33.             Node newNode = new Node(newValue);
  34.             if (head == null) {
  35.                 newNode.next = head;
  36.                 newNode.prev = null;
  37.                 head = newNode;
  38.             } else {
  39.                 Node current = head;
  40.                 while (current.next != null) {
  41.                     current = current.next;
  42.                 }
  43.                 newNode.next = current.next;
  44.                 newNode.prev = current;
  45.                 current.next = newNode;
  46.             }
  47.             size++;
  48.         }
  49.  
  50.         public Integer get(int index) {
  51.             Node current = head;
  52.             for (int i = 0; i < index; i++) {
  53.                 current = current.next;
  54.             }
  55.             return current.value;
  56.         }
  57.  
  58.     }
  59.  
  60.     private static final Scanner scan = new Scanner(System.in);
  61.  
  62.     private static void printCondition() {
  63.         System.out.println("Данная программа выведет двунаправленный список в обратном порядке");
  64.     }
  65.  
  66.     private static boolean tryConvertStringToInteger (String num, int min, int max) {
  67.         int n;
  68.         boolean isCorrect;
  69.  
  70.         n = 0;
  71.         isCorrect = true;
  72.  
  73.         try {
  74.             n = Integer.parseInt(num);
  75.         }
  76.         catch (Exception err) {
  77.             if (!num.equals("-"))
  78.                 isCorrect = false;
  79.         }
  80.         if (isCorrect && (n < min || n > max))
  81.             isCorrect = false;
  82.  
  83.         return isCorrect;
  84.     }
  85.  
  86.     private static String readNum(int min, int max) {
  87.         boolean isCorrect;
  88.         String num;
  89.  
  90.         do {
  91.             num = scan.nextLine();
  92.             if (!num.equals("-")) {
  93.                 isCorrect = tryConvertStringToInteger(num, min, max);
  94.                 if (!isCorrect)
  95.                     System.out.println("Вы ввели некорректные данные! Попробуйте снова:");
  96.             }
  97.             else
  98.                 isCorrect = true;
  99.         } while (!isCorrect);
  100.  
  101.         return num;
  102.     }
  103.  
  104.     private static int readChoice(){
  105.         int n;
  106.         boolean isCorrect;
  107.         n = 0;
  108.         do {
  109.             isCorrect = true;
  110.             try {
  111.                 n = Integer.parseInt(scan.nextLine());
  112.             }
  113.             catch (Exception err) {
  114.                 System.out.println("Вы ввели некорректные данные. Попробуйте снова");
  115.                 isCorrect = false;
  116.             }
  117.             if (isCorrect && (n < 1 || n > 2)) {
  118.                 System.out.println("Введено значение не входящее в диапазон допустимых значений");
  119.                 isCorrect = false;
  120.             }
  121.         } while (!isCorrect);
  122.         return n;
  123.     }
  124.  
  125.     private static int chooseInputListMethod() {
  126.         int choice;
  127.  
  128.         System.out.println("Выберите вариант ввода:");
  129.         System.out.println("1.Ввод из консоли");
  130.         System.out.println("2.Ввод из файла");
  131.         choice = readChoice();
  132.         return choice;
  133.     }
  134.  
  135.     private static ListElem inputListFromConsole() {
  136.         ListElem list;
  137.         String num;
  138.         int n;
  139.         final int MIN = 0, MAX = 99999;
  140.         list = new ListElem();
  141.  
  142.         num = readNum(MIN, MAX);
  143.  
  144.         while (!num.equals("-")) {
  145.             n = Integer.parseInt(num);
  146.             list.insert(n);
  147.  
  148.             num = readNum(MIN, MAX);
  149.         }
  150.  
  151.         return list;
  152.     }
  153.  
  154.     private static String inputListFromFile() {
  155.         String pathFile;
  156.         boolean isInputFromFileSuccessfully;
  157.  
  158.         System.out.println("Данные в файле должны содержать элементы списка (числа от 0 до 99999), записанные в отдельных строках");
  159.         do {
  160.             System.out.print("Введите путь к файлу и его имя с его расширением:");
  161.             pathFile = scan.nextLine();
  162.             isInputFromFileSuccessfully = checkFile(pathFile);
  163.         } while(!isInputFromFileSuccessfully);
  164.  
  165.         return pathFile;
  166.     }
  167.  
  168.     private static boolean checkFile(String path) {
  169.         final int MIN = 0, MAX = 99999;
  170.         String tempNum;
  171.         File checkFile;
  172.         boolean isFileCorrect;
  173.  
  174.         tempNum = "";
  175.         checkFile = new File(path);
  176.         isFileCorrect = true;
  177.  
  178.         if (!checkFile.isFile()) {
  179.             System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново:");
  180.             isFileCorrect = false;
  181.         }
  182.         if (isFileCorrect && !checkFile.canRead() ) {
  183.             System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново:");
  184.             isFileCorrect = false;
  185.         }
  186.  
  187.         if (isFileCorrect) {
  188.             try (Scanner fileScan = new Scanner(checkFile)) {
  189.  
  190.                 if (!fileScan.hasNextLine()) {
  191.                     isFileCorrect = false;
  192.                     System.out.println("Файл пустой! Внесите изменения в файл и повторите попытку:");
  193.                 }
  194.  
  195.                 if (isFileCorrect) {
  196.                     while (fileScan.hasNextLine() && isFileCorrect) {
  197.                         tempNum = fileScan.nextLine();
  198.                         isFileCorrect = tryConvertStringToInteger(tempNum, MIN, MAX);
  199.                     }
  200.  
  201.                     if (!isFileCorrect)
  202.                         System.out.println("Данные в файле некорректны! Внесите изменения и повторите попытку!");
  203.                 }
  204.             }
  205.             catch (FileNotFoundException e) {
  206.                 System.out.println("Файл по данному пути не существует! Пожалуйста проверьте файл и введите путь заново:");
  207.                 isFileCorrect = false;
  208.             }
  209.         }
  210.         return isFileCorrect;
  211.     }
  212.  
  213.     private static ListElem readFile (Scanner fileScan) {
  214.         String num;
  215.         ListElem list;
  216.  
  217.         list = new ListElem();
  218.  
  219.         while (fileScan.hasNextLine()) {
  220.             num = fileScan.nextLine();
  221.             list.insert(Integer.parseInt(num));
  222.         }
  223.  
  224.         return list;
  225.     }
  226.  
  227.     private static int chooseOutputListMethod() {
  228.         int choice;
  229.  
  230.         System.out.println("Выберите вариант вывода:");
  231.         System.out.println("1.Вывод в консоль");
  232.         System.out.println("2.Вывод в файл");
  233.         choice = readChoice();
  234.  
  235.         return choice;
  236.     }
  237.  
  238.     private static void outputListToConsole(ListElem list) {
  239.         if (list.size() > 0) {
  240.             for (int i = 0; i < list.size(); i++) {
  241.                 System.out.print(list.get(i) + " ");
  242.             }
  243.         }
  244.         else {
  245.             System.out.print("Список пуст!");
  246.         }
  247.     }
  248.  
  249.     private static void outputListToFile(ListElem list) {
  250.         String path;
  251.         boolean isFileIncorrect;
  252.  
  253.         System.out.println("Для вывода введите путь к файлу.");
  254.         System.out.println("Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)");
  255.         do {
  256.             isFileIncorrect = false;
  257.             System.out.print("Введите путь к файлу и его имя c расширением: ");
  258.             path = scan.nextLine();
  259.             File outputFile = new File(path);
  260.             try {
  261.                 if (outputFile.isFile()) {
  262.                     if (outputFile.canWrite()) {
  263.                         try (FileWriter writer = new FileWriter(outputFile)) {
  264.                             if (list.size() > 0) {
  265.                                 for (int i = 0; i < list.size(); i++) {
  266.                                     writer.write (list.get(i) + " ");
  267.                                 }
  268.                             }
  269.                             else {
  270.                                 writer.write("Список пуст!");
  271.                             }
  272.                         }
  273.                     }
  274.                     else {
  275.                         System.out.println("Файл доступен только для чтения!");
  276.                         isFileIncorrect = true;
  277.                     }
  278.                 }
  279.                 else {
  280.                     outputFile.createNewFile();
  281.                     try (FileWriter writer = new FileWriter(outputFile)) {
  282.                         if (list.size() > 0) {
  283.                             for (int i = 0; i < list.size(); i++) {
  284.                                 writer.write (list.get(i) + " ");
  285.                             }
  286.                         }
  287.                         else {
  288.                             writer.write("Список пуст!");
  289.                         }
  290.                     }
  291.                 }
  292.             }
  293.             catch (IOException e) {
  294.                 System.out.println("Не удалось вывести в файл!");
  295.                 isFileIncorrect = true;
  296.             }
  297.         } while (isFileIncorrect);
  298.         System.out.println("Вывод данных... успешно!");
  299.     }
  300.  
  301.     private static ListElem reverseList (ListElem List){
  302.         ListElem reversedList;
  303.  
  304.         reversedList = new ListElem();
  305.  
  306.         for (int i = List.size() - 1; i >= 0; i-- ) {
  307.                 reversedList.insert(List.get(i));
  308.             }
  309.  
  310.         return reversedList;
  311.     }
  312.  
  313.     public static void main(String[] args) {
  314.         String path;
  315.         int choice;
  316.         ListElem list, resultList;
  317.         File file;
  318.  
  319.         list = new ListElem();
  320.  
  321.         printCondition();
  322.  
  323.         choice = chooseInputListMethod();
  324.         if (choice == 1) {
  325.             System.out.println("Введите элементы списка (числа от 0 до 99999), чтобы закончить введите '-':");
  326.             list = inputListFromConsole();
  327.         }
  328.         else {
  329.             path = inputListFromFile();
  330.             file = new File(path);
  331.             try (Scanner fileScan = new Scanner(file)) {
  332.                 list = readFile(fileScan);
  333.             }
  334.             catch (FileNotFoundException e) {
  335.                 System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново:");
  336.             }
  337.         }
  338.  
  339.         resultList = reverseList(list);
  340.  
  341.         choice = chooseOutputListMethod();
  342.         if (choice == 1) {
  343.             outputListToConsole(resultList);
  344.         }
  345.         else {
  346.             outputListToFile(resultList);
  347.         }
  348.  
  349.         scan.close();
  350.     }
  351. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement