Advertisement
gguuppyy

lab62

Apr 21st, 2024 (edited)
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.93 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.  
  10. class Main {
  11.     public static Scanner scan = new Scanner(System.in);
  12.  
  13.     public static void outputCondition() {
  14.         System.out.println("Программа выполняет рекурсивную функцию,\n" + "определяющую количество способов\n" + "передвижения шашки на n-ю клетку.");
  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.err.println("Введены некорректные данные. Повторите ввод:");
  33.                 isIncorrect = true;
  34.             }
  35.             if ((!isIncorrect) && ((k < MIN) || (k > MAX))) {
  36.                 System.err.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.err.print("Файл по заданному пути отсутствует. ");
  55.         } else if (!path.endsWith(".txt")) {
  56.             isIncorrect = true;
  57.             System.err.print("Недопустимое расширение файла. ");
  58.         }
  59.         return isIncorrect;
  60.     }
  61.  
  62.     public static void outputSuccessfulInput() {
  63.         System.out.println("Данные из файла считаны успешно.");
  64.     }
  65.  
  66.  
  67.     public static int inputNumberOfCellsFromConsole() {
  68.         int n = 0;
  69.         final int MIN_VALUE = 1;
  70.         final int MAX_VALUE = 30;
  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 || n > MAX_VALUE) {
  82.                     isIncorrect = true;
  83.                     System.err.println("Количество клеток должно быть больше 0 и меньше 30. Повторите ввод.");
  84.                 }
  85.             } catch (NumberFormatException e) {
  86.                 isIncorrect = true;
  87.                 System.err.println("Некорректный ввод. Повторите ввод.");
  88.             }
  89.         } while (isIncorrect);
  90.  
  91.         return n;
  92.     }
  93.  
  94.     public static String takePath() {
  95.         String path;
  96.         boolean isIncorrect;
  97.         do {
  98.             isIncorrect = false;
  99.             path = scan.nextLine();
  100.             isIncorrect = isFileCorrect(path);
  101.             if (isIncorrect) {
  102.                 System.err.println("Повторите ввод пути к файлу:");
  103.             }
  104.         } while (isIncorrect);
  105.         return path;
  106.     }
  107.  
  108.     public static int inputNumberOfCellsFromFile() {
  109.         String path, s;
  110.         int n = 0;
  111.         boolean isIncorrect;
  112.         final int MAX_VALUE = 30;
  113.         final int MIN_VALUE = 1;
  114.  
  115.         do {
  116.             outputPathInputCondition();
  117.             isIncorrect = false;
  118.             path = takePath();
  119.             Scanner scan = null;
  120.             try {
  121.                 scan = new Scanner(new File(path));
  122.             } catch (FileNotFoundException e) {
  123.                 System.err.println(e.getMessage());
  124.                 isIncorrect = true;
  125.             }
  126.  
  127.             if (!isIncorrect) {
  128.                 try (BufferedReader fReader = new BufferedReader(new FileReader(path))) {
  129.                     s = fReader.readLine();
  130.  
  131.                     try {
  132.                         n = Integer.parseInt(s);
  133.  
  134.                         if (n < MIN_VALUE || n > MAX_VALUE) {
  135.                             isIncorrect = true;
  136.                             System.err.println("Количество клеток должно быть больше 0 и меньше 30. Исправьте файл и нажмите Enter.");
  137.                         }
  138.                     } catch (NumberFormatException e) {
  139.                         isIncorrect = true;
  140.                         System.err.println("Некорректные данные в файле. Исправьте файл и нажмите Enter.");
  141.                     }
  142.                 } catch (IOException e) {
  143.                     isIncorrect = true;
  144.                     System.err.println("Ошибка при чтении файла! Исправьте файл и нажмите Enter.");
  145.                 }
  146.             }
  147.             if (isIncorrect) {
  148.                 scan.nextLine();
  149.             }
  150.         } while (isIncorrect);
  151.         return n;
  152.     }
  153.  
  154.  
  155.     public static int inputNumberOfCells(boolean isInput) {
  156.         int n;
  157.  
  158.         if (isInput) {
  159.             n = inputNumberOfCellsFromFile();
  160.             outputSuccessfulInput();
  161.         } else {
  162.             n = inputNumberOfCellsFromConsole();
  163.         }
  164.  
  165.         return n;
  166.     }
  167.  
  168.  
  169.     public static void outputPathOutputCondition() {
  170.         System.out.println("Введите путь к файлу, в который вы хотите вывести результат: ");
  171.     }
  172.  
  173.     public static int countWaysToMove(int n) {
  174.         if (n == 1) {
  175.             return 1;
  176.         } else if (n == 2) {
  177.             return 2;
  178.         } else {
  179.             return countWaysToMove(n - 1) + countWaysToMove(n - 2);
  180.         }
  181.     }
  182.  
  183.     public static void outputInFile(int n, String path) {
  184.         try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path, false))) {
  185.             int ways = countWaysToMove(n);
  186.             fileWriter.println("Количество способов передвижения шашки на " + n + "-ю клетку: " + ways);
  187.             fileWriter.flush();
  188.         } catch (IOException e) {
  189.             System.err.println(e.getMessage());
  190.         }
  191.     }
  192.  
  193.     public static void outputSuccessfulOutput() {
  194.         System.out.println("Данные записаны в файл успешно.");
  195.     }
  196.  
  197.     public static void outputInConsole(int n) {
  198.         int ways = countWaysToMove(n);
  199.         System.out.println("Количество способов передвижения шашки на " + n + "-ю клетку: " + ways);
  200.     }
  201.  
  202.     public static int chooseOutputOption() {
  203.         System.out.println("Введите 0, если хотите вывести результат в консоль, и 1, если хотите вывести в файл: ");
  204.         return scan.nextInt();
  205.     }
  206.  
  207.     public static void outputFinal(int outputChoice, int n, String path) {
  208.         if (outputChoice == 1) {
  209.             if (path == null || path.isEmpty()) {
  210.                 System.err.println("Некорректный путь к файлу.");
  211.                 return;
  212.             }
  213.             outputInFile(n, path);
  214.             outputSuccessfulOutput();
  215.         } else {
  216.             outputInConsole(n);
  217.         }
  218.     }
  219.  
  220.     public static void handleOutputChoice(int outputChoice, int n) {
  221.         switch (outputChoice) {
  222.             case 1:
  223.                 outputPathOutputCondition();
  224.                 String path = takePath();
  225.                 outputFinal(outputChoice, n, path);
  226.                 break;
  227.             case 0:
  228.                 outputFinal(outputChoice, n, null);
  229.                 break;
  230.             default:
  231.                 System.err.println("Неверный ввод. Пожалуйста, выберите 0 для вывода в консоль или 1 для вывода в файл.");
  232.                 break;
  233.         }
  234.     }
  235.  
  236.     public static void main(String[] args) {
  237.         int n;
  238.         boolean isInput;
  239.         int outputChoice;
  240.         outputCondition();
  241.         outputInputChoice();
  242.         isInput = isUserChoice();
  243.         n = inputNumberOfCells(isInput);
  244.         outputChoice = chooseOutputOption();
  245.         handleOutputChoice(outputChoice, n);
  246.  
  247.         scan.close();
  248.  
  249.     }
  250. }
  251.  
  252.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement