Advertisement
gguuppyy

лаб44

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