Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.PrintWriter;
- import java.io.IOException;
- import java.util.Scanner;
- class Main {
- public static Scanner scan = new Scanner(System.in);
- public static void outputCondition() {
- System.out.println("Программа выполняет рекурсивную функцию,\n" + "определяющую количество способов\n" + "передвижения шашки на n-ю клетку.");
- }
- public static void outputInputChoice() {
- System.out.println("Введите 0, если хотите ввести данные из консоли, и 1, если из файла:");
- }
- public static boolean isUserChoice() {
- final int MIN = 0;
- final int MAX = 1;
- int k = 0;
- boolean isIncorrect;
- boolean isChoice;
- do {
- isIncorrect = false;
- try {
- k = Integer.parseInt(scan.nextLine());
- } catch (Exception e) {
- System.err.println("Введены некорректные данные. Повторите ввод:");
- isIncorrect = true;
- }
- if ((!isIncorrect) && ((k < MIN) || (k > MAX))) {
- System.err.println("Число не входит в допустимый диапазон. Повторите ввод:");
- isIncorrect = true;
- }
- } while (isIncorrect);
- isChoice = !(k == MIN);
- return isChoice;
- }
- public static void outputPathInputCondition() {
- System.out.println("Введите путь к файлу, содержащему количество дисков:");
- }
- public static boolean isFileCorrect(String path) {
- boolean isIncorrect = false;
- File f = new File(path);
- if (!f.exists()) {
- isIncorrect = true;
- System.err.print("Файл по заданному пути отсутствует. ");
- } else if (!path.endsWith(".txt")) {
- isIncorrect = true;
- System.err.print("Недопустимое расширение файла. ");
- }
- return isIncorrect;
- }
- public static void outputSuccessfulInput() {
- System.out.println("Данные из файла считаны успешно.");
- }
- public static int inputNumberOfCellsFromConsole() {
- int n = 0;
- final int MIN_VALUE = 1;
- final int MAX_VALUE = 30;
- boolean isIncorrect;
- Scanner scanner = new Scanner(System.in);
- do {
- System.out.println("Введите количество клеток:");
- isIncorrect = false;
- try {
- n = Integer.parseInt(scanner.nextLine());
- if (n < MIN_VALUE || n > MAX_VALUE) {
- isIncorrect = true;
- System.err.println("Количество клеток должно быть больше 0 и меньше 30. Повторите ввод.");
- }
- } catch (NumberFormatException e) {
- isIncorrect = true;
- System.err.println("Некорректный ввод. Повторите ввод.");
- }
- } while (isIncorrect);
- return n;
- }
- public static String takePath() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- path = scan.nextLine();
- isIncorrect = isFileCorrect(path);
- if (isIncorrect) {
- System.err.println("Повторите ввод пути к файлу:");
- }
- } while (isIncorrect);
- return path;
- }
- public static int inputNumberOfCellsFromFile() {
- String path, s;
- int n = 0;
- boolean isIncorrect;
- final int MAX_VALUE = 30;
- final int MIN_VALUE = 1;
- do {
- outputPathInputCondition();
- isIncorrect = false;
- path = takePath();
- Scanner scan = null;
- try {
- scan = new Scanner(new File(path));
- } catch (FileNotFoundException e) {
- System.err.println(e.getMessage());
- isIncorrect = true;
- }
- if (!isIncorrect) {
- try (BufferedReader fReader = new BufferedReader(new FileReader(path))) {
- s = fReader.readLine();
- try {
- n = Integer.parseInt(s);
- if (n < MIN_VALUE || n > MAX_VALUE) {
- isIncorrect = true;
- System.err.println("Количество клеток должно быть больше 0 и меньше 30. Исправьте файл и нажмите Enter.");
- }
- } catch (NumberFormatException e) {
- isIncorrect = true;
- System.err.println("Некорректные данные в файле. Исправьте файл и нажмите Enter.");
- }
- } catch (IOException e) {
- isIncorrect = true;
- System.err.println("Ошибка при чтении файла! Исправьте файл и нажмите Enter.");
- }
- }
- if (isIncorrect) {
- scan.nextLine();
- }
- } while (isIncorrect);
- return n;
- }
- public static int inputNumberOfCells(boolean isInput) {
- int n;
- if (isInput) {
- n = inputNumberOfCellsFromFile();
- outputSuccessfulInput();
- } else {
- n = inputNumberOfCellsFromConsole();
- }
- return n;
- }
- public static void outputPathOutputCondition() {
- System.out.println("Введите путь к файлу, в который вы хотите вывести результат: ");
- }
- public static int countWaysToMove(int n) {
- if (n == 1) {
- return 1;
- } else if (n == 2) {
- return 2;
- } else {
- return countWaysToMove(n - 1) + countWaysToMove(n - 2);
- }
- }
- public static void outputInFile(int n, String path) {
- try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path, false))) {
- int ways = countWaysToMove(n);
- fileWriter.println("Количество способов передвижения шашки на " + n + "-ю клетку: " + ways);
- fileWriter.flush();
- } catch (IOException e) {
- System.err.println(e.getMessage());
- }
- }
- public static void outputSuccessfulOutput() {
- System.out.println("Данные записаны в файл успешно.");
- }
- public static void outputInConsole(int n) {
- int ways = countWaysToMove(n);
- System.out.println("Количество способов передвижения шашки на " + n + "-ю клетку: " + ways);
- }
- public static int chooseOutputOption() {
- System.out.println("Введите 0, если хотите вывести результат в консоль, и 1, если хотите вывести в файл: ");
- return scan.nextInt();
- }
- public static void outputFinal(int outputChoice, int n, String path) {
- if (outputChoice == 1) {
- if (path == null || path.isEmpty()) {
- System.err.println("Некорректный путь к файлу.");
- return;
- }
- outputInFile(n, path);
- outputSuccessfulOutput();
- } else {
- outputInConsole(n);
- }
- }
- public static void handleOutputChoice(int outputChoice, int n) {
- switch (outputChoice) {
- case 1:
- outputPathOutputCondition();
- String path = takePath();
- outputFinal(outputChoice, n, path);
- break;
- case 0:
- outputFinal(outputChoice, n, null);
- break;
- default:
- System.err.println("Неверный ввод. Пожалуйста, выберите 0 для вывода в консоль или 1 для вывода в файл.");
- break;
- }
- }
- public static void main(String[] args) {
- int n;
- boolean isInput;
- int outputChoice;
- outputCondition();
- outputInputChoice();
- isInput = isUserChoice();
- n = inputNumberOfCells(isInput);
- outputChoice = chooseOutputOption();
- handleOutputChoice(outputChoice, n);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement