Advertisement
gguuppyy

lab44goodinfile

Mar 30th, 2024
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.04 KB | None | 0 0
  1. import java.io.*;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.PrintWriter;
  7. import java.io.IOException;
  8. import java.util.Scanner;
  9. class Main {
  10.     public static Scanner scan = new Scanner(System.in);
  11.  
  12.     public static void outputCondition() {
  13.         System.out.println("Программа выполняет рекурсивную процедуру\n" +
  14.                 "решения головоломки Ханойская башня).");
  15.     }
  16.  
  17.     public static void outputInputChoice() {
  18.         System.out.println("Введите 0, если хотите ввести данные из консоли, и 1, если из файла:");
  19.     }
  20.  
  21.     public static boolean isUserChoice() {
  22.         final int MIN = 0;
  23.         final int MAX = 1;
  24.         int k = 0;
  25.         boolean isIncorrect;
  26.         boolean isChoice;
  27.         do {
  28.             isIncorrect = false;
  29.             try {
  30.                 k = Integer.parseInt(scan.nextLine());
  31.             } catch (Exception e) {
  32.                 System.out.println("Введены некорректные данные. Повторите ввод:");
  33.                 isIncorrect = true;
  34.             }
  35.             if ((!isIncorrect) && ((k < MIN) || (k > MAX))) {
  36.                 System.out.println("Число не входит в допустимый диапазон. Повторите  ввод:");
  37.                 isIncorrect = true;
  38.             }
  39.         } while (isIncorrect);
  40.  
  41.         isChoice = !(k == MIN);
  42.         return isChoice;
  43.     }
  44.  
  45.     public static void outputPathInputCondition() {
  46.         System.out.println("Введите путь к файлу, содержащему последовательность:");
  47.     }
  48.  
  49.     public static boolean isFileCorrect(String path) {
  50.         boolean isIncorrect = false;
  51.         File f = new File(path);
  52.         if (!f.exists()) {
  53.             isIncorrect = true;
  54.             System.out.print("Файл по заданному пути отсутствует. ");
  55.         }
  56.         else if (!path.endsWith(".txt")) {
  57.             isIncorrect = true;
  58.             System.out.print("Недопустимое расширение файла. ");
  59.         }
  60.         return isIncorrect;
  61.     }
  62.     public static void outputSuccessfulInput() {
  63.         System.out.println("Данные из файла считаны успешно.");
  64.     }
  65.  
  66.  
  67.  
  68.     public static int inputNumberOfDisksFromConsole() {
  69.         int n = 0;
  70.         final int MIN_VALUE = 1;
  71.         boolean isIncorrect;
  72.         Scanner scanner = new Scanner(System.in);
  73.  
  74.         do {
  75.             System.out.println("Введите количество дисков:");
  76.             isIncorrect = false;
  77.  
  78.             try {
  79.                 n = Integer.parseInt(scanner.nextLine());
  80.  
  81.                 if (n < MIN_VALUE) {
  82.                     isIncorrect = true;
  83.                     System.err.println("Количество дисков должно быть больше 0. Повторите ввод.");
  84.                 }
  85.             } catch (NumberFormatException e) {
  86.                 isIncorrect = true;
  87.                 System.err.println("Некорректный ввод. Повторите ввод.");
  88.             }
  89.         } while (isIncorrect);
  90.  
  91.         return n;
  92.     }
  93.     public static String takePath() {
  94.         String path;
  95.         boolean isIncorrect;
  96.         do {
  97.             isIncorrect = false;
  98.             path = scan.nextLine();
  99.             // Проверка корректности пути к файлу
  100.             // isIncorrect = isFileCorrect(path);
  101.             if (isIncorrect) {
  102.                 System.out.println("Повторите ввод пути к файлу:");
  103.             }
  104.         } while (isIncorrect);
  105.         return path;
  106.     }
  107.     public static int inputNumberOfDisksFromFile() {
  108.         String path, s;
  109.         int n = 0;
  110.         boolean isIncorrect;
  111.         final int MIN_VALUE = 1;
  112.  
  113.         do {
  114.             outputPathInputCondition();
  115.             isIncorrect = false;
  116.             path = takePath();
  117.             Scanner scan = null;
  118.             try {
  119.                 scan = new Scanner(new File(path));
  120.             } catch (FileNotFoundException e) {
  121.                 System.out.println(e.getMessage());
  122.                 isIncorrect = true;
  123.             }
  124.  
  125.             if (!isIncorrect) {
  126.                 try (BufferedReader fReader = new BufferedReader(new FileReader(path))) {
  127.                     s = fReader.readLine();
  128.                     n = Integer.parseInt(s);
  129.  
  130.                     if (n < MIN_VALUE) {
  131.                         isIncorrect = true;
  132.                         System.err.println("Количество дисков должно быть больше 0. Исправьте файл и нажмите Enter.");
  133.                     }
  134.                 } catch (IOException e) {
  135.                     isIncorrect = true;
  136.                     System.err.println("Ошибка при чтении файла! Исправьте файл и нажмите Enter.");
  137.                 }
  138.             }
  139.             if (isIncorrect) {
  140.                 scan.nextLine();
  141.             }
  142.         } while (isIncorrect);
  143.         return n;
  144.     }
  145.  
  146.  
  147.     public static int inputNumberOfDisks(boolean isInput) {
  148.         int n;
  149.  
  150.         if (isInput) {
  151.             n = inputNumberOfDisksFromFile();
  152.             outputSuccessfulInput();
  153.         } else {
  154.             n = inputNumberOfDisksFromConsole();
  155.         }
  156.  
  157.         return n;
  158.     }
  159.  
  160.  
  161.     public static void outputPathOutputCondition() {
  162.         System.out.println("Введите путь к файлу, в который вы хотите вывести результат: ");
  163.     }
  164.     public static void outputInFile(int n, String path) {
  165.         try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path, false))) {
  166.             solveHanoiTower(n, 1, 3, 2, fileWriter);
  167.             fileWriter.flush();
  168.         } catch (IOException e) {
  169.             System.out.println(e.getMessage());
  170.         }
  171.     }
  172.  
  173.     public static void solveHanoiTower(int n, int source, int destination, int auxiliary, PrintWriter fileWriter) {
  174.         if (n == 1) {
  175.             fileWriter.println("Переместить диск 1 с башни " + source + " на башню " + destination);
  176.             return;
  177.         }
  178.         solveHanoiTower(n - 1, source, auxiliary, destination, fileWriter);
  179.         fileWriter.println("Переместить диск " + n + " с башни " + source + " на башню " + destination);
  180.         solveHanoiTower(n - 1, auxiliary, destination, source, fileWriter);
  181.     }
  182.  
  183.     public static void outputSuccessfulOutput() {
  184.         System.out.println("Данные записаны в файл успешно.");
  185.     }
  186.  
  187.     public static void outputInConsole(int n) {
  188.         solveHanoiTower(n, 1, 3, 2, null);
  189.     }
  190.  
  191.     public static int chooseOutputOption() {
  192.         System.out.println("Введите 0, если хотите вывести результат в консоль, и 1, если хотите вывести в файл: ");
  193.         return scan.nextInt();
  194.     }
  195.     public static void outputFinalTower(int outputChoice, int n, String path) {
  196.         if (outputChoice == 1) {
  197.             outputInFile(n, path);
  198.             outputSuccessfulOutput();
  199.         } else {
  200.             outputInConsole(n); // Вывод в консоль
  201.         }
  202.     }
  203.  
  204.     public static void main(String[] args) {
  205.         int n;
  206.         boolean isInput;
  207.         int outputChoice;
  208.         outputCondition();
  209.         outputInputChoice();
  210.         isInput = isUserChoice();
  211.         n = inputNumberOfDisks(isInput);
  212.         outputChoice = chooseOutputOption();
  213.  
  214.         if (outputChoice == 1) {
  215.             outputPathOutputCondition();
  216.             scan.nextLine();
  217.             String path = takePath();
  218.             outputFinalTower(outputChoice, n, path);
  219.         } else {
  220.             outputFinalTower(outputChoice, n, null);
  221.         }
  222.  
  223.         scan.close();
  224.     }
  225. }
  226.  
  227.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement