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.IOException;
- import java.util.Scanner;
- class Main {
- public static Scanner scan = new Scanner(System.in);
- public static void outputCondition() {
- System.out.println("Программа выполняет рекурсивную процедуру\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.out.println("Введены некорректные данные. Повторите ввод:");
- isIncorrect = true;
- }
- if ((!isIncorrect) && ((k < MIN) || (k > MAX))) {
- System.out.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.out.print("Файл по заданному пути отсутствует. ");
- }
- else if (!path.endsWith(".txt")) {
- isIncorrect = true;
- System.out.print("Недопустимое расширение файла. ");
- }
- return isIncorrect;
- }
- public static void outputSuccessfulInput() {
- System.out.println("Данные из файла считаны успешно.");
- }
- import java.util.Scanner;
- public static int inputNumberOfDisksFromConsole() {
- int n = 0;
- final int MIN_VALUE = 1;
- boolean isIncorrect;
- Scanner scanner = new Scanner(System.in);
- do {
- System.out.println("Введите количество дисков:");
- isIncorrect = false;
- try {
- n = Integer.parseInt(scanner.nextLine());
- if (n < MIN_VALUE) {
- isIncorrect = true;
- System.err.println("Количество дисков должно быть больше 0. Повторите ввод.");
- }
- } catch (NumberFormatException e) {
- isIncorrect = true;
- System.err.println("Некорректный ввод. Повторите ввод.");
- }
- } while (isIncorrect);
- return n;
- }
- public static int inputNumberOfDisksFromFile() {
- String path, s;
- int n = 0;
- boolean isIncorrect;
- 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.out.println(e.getMessage());
- isIncorrect = true;
- }
- if (!isIncorrect) {
- try (BufferedReader fReader = new BufferedReader(new FileReader(path))) {
- s = fReader.readLine();
- n = Integer.parseInt(s);
- if (n < MIN_VALUE) {
- isIncorrect = true;
- System.err.println("Количество дисков должно быть больше 0. Исправьте файл и нажмите Enter.");
- }
- } catch (IOException e) {
- isIncorrect = true;
- System.err.println("Ошибка при чтении файла! Исправьте файл и нажмите Enter.");
- }
- }
- if (isIncorrect) {
- scan.nextLine();
- }
- } while (isIncorrect);
- return n;
- }
- public static int inputNumberOfDisks(boolean isInput) {
- int n;
- if (isInput) {
- n= inputNumberOfDisksFromFile();
- outputSuccessfulInput();
- } else {
- System.out.println("Введите количество дисков:");
- n = inputNumberOfDisksFromConsole();
- outputSuccessfulInput();
- }
- return n;
- }
- public static void solveHanoiTower(int n, int source, int destination, int auxiliary) {
- if (n == 1) {
- System.out.println("Переместить диск 1 с башни " + source + " на башню " + destination);
- return;
- }
- solveHanoiTower(n - 1, source, auxiliary, destination);
- System.out.println("Переместить диск " + n + " с башни " + source + " на башню " + destination);
- solveHanoiTower(n - 1, auxiliary, destination, source);
- }
- public static void outputOutputChoice() {
- System.out.println("Введите 0, если хотите вывести данные в консоль, и 1 - в файл:");
- }
- public static void outputPathOutputCondition() {
- System.out.println("Введите путь к файлу, в который вы хотите вывести результат: ");
- }
- public static String TakePath() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- path = scan.nextLine();
- isIncorrect = isFileCorrect(path);
- if (isIncorrect) {
- System.out.println("Повторите ввод пути к файлу:");
- }
- } while (isIncorrect);
- return path;
- }
- public static void outputInFile(int n) {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- path = TakePath();
- try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path, false))) {
- solveHanoiTower(n, 1, 3, 2, fileWriter);
- } catch (IOException e) {
- System.out.println(e.getMessage());
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- public static void outputSuccessfulOutput() {
- System.out.println("Данные записаны в файл успешно.");
- }
- public static void outputInConsole(int n) {
- solveHanoiTower(n, 1, 3, 2);
- }
- public static void outputFinalTower(boolean isOutput, int n) {
- if (isOutput) {
- outputPathOutputCondition();
- outputInFile(n);
- outputSuccessfulOutput();
- } else {
- outputInConsole(n);
- }
- }
- public static void main(String[] args) {
- int n;
- boolean isInput;
- boolean isOutput;
- outputCondition();
- outputInputChoice();
- isInput = isUserChoice();
- n = inputNumberOfDisks(isInput);
- outputOutputChoice();
- isOutput = isUserChoice();
- outputFinalTower(isOutput, n);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement