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("Данные из файла считаны успешно.");
- }
- public static int inputNumberFromConsole() {
- final int MIN = 1;
- int n = 0;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- try {
- n = Integer.parseInt(scan.nextLine());
- } catch (Exception e) {
- System.out.println("Введены некорректные данные. Повторите ввод:");
- isIncorrect = true;
- }
- if ((!isIncorrect) && (n < MIN)) {
- System.out.println("Введено недопустимое число элементов. Повторите ввод:");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return n;
- }
- public static int[] inputVectorFromFile() {
- String path, s;
- int n = 0;
- int i, j;
- int[] arr = null;
- 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.");
- } else {
- arr = new int[n];
- String[] integersInString = fReader.readLine().split(" ");
- for (i = 0; i < n; i++) {
- arr[i] = Integer.parseInt(integersInString[i]);
- }
- }
- } catch (IOException e) {
- isIncorrect = true;
- System.err.println("Ошибка при чтении файла! Исправьте файл и нажмите Enter.");
- }
- }
- if (isIncorrect) {
- scan.nextLine();
- }
- } while (isIncorrect);
- return arr;
- }
- public static int[] inputVectorFromConsole(int n) {
- final int NUM_MIN = 1;
- int i, j;
- int[] a = new int[n];
- boolean isIncorrect;
- System.out.println("Введите элементы последовательности.");
- for (i = 0; i < a.length; i++) {
- do {
- isIncorrect = false;
- try {
- a[i] = Integer.parseInt(scan.nextLine());
- }
- catch (Exception e) {
- System.out.println("Введены некорректные данные. Повторите ввод:");
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- return a;
- }
- public static int[] inputVector(boolean isInput) {
- int n;
- int[] a;
- if (isInput) {
- a = inputVectorFromFile();
- outputSuccessfulInput();
- }
- else {
- System.out.println("Введите количество элементов последовательности.");
- n = inputNumberFromConsole();
- a = inputVectorFromConsole(n);
- }
- return a;
- }
- public static void quickSort(int[] arr, int low, int high) {
- int i = low;
- int j = high;
- int pivot = arr[(low + high) / 2];
- while (i <= j) {
- while (arr[i] < pivot) {
- i++;
- }
- while (arr[j] > pivot) {
- j--;
- }
- if (i <= j) {
- int temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- i++;
- j--;
- }
- }
- if (low < j) {
- quickSort(arr, low, j);
- }
- if (i < high) {
- quickSort(arr, i, high);
- }
- }
- 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 [] arr) {
- String path;
- boolean isIncorrect;
- int i, j;
- do {
- isIncorrect = false;
- path = TakePath();
- try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path, false))) {
- fileWriter.println("Отсортированная последовательность:");
- for (i = 0; i < arr.length; i++){
- fileWriter.print(arr[i] + " ");
- }
- fileWriter.println();
- } catch (IOException e) {
- System.out.print(e.getMessage());
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- public static void outputSuccessfulOutput() {
- System.out.println("Данные записаны в файл успешно.");
- }
- public static void outputInConsole(int [] arr) {
- int i, j;
- System.out.println("Отсортированная последовательность:");
- for (i = 0; i < arr.length; i++) {
- System.out.print(arr[i] + " ");
- }
- }
- public static void outputFinalArr(boolean isOutput, int [] arr) {
- if (isOutput) {
- outputPathOutputCondition();
- outputInFile(arr);
- outputSuccessfulOutput();
- }
- else {
- outputInConsole(arr);
- }
- }
- public static void main(String[] args) {
- int [] arr;
- boolean isInput;
- boolean isOutput;
- outputCondition();
- outputInputChoice();
- isInput = isUserChoice();
- arr = inputVector(isInput);
- quickSort(arr, 0, arr.length-1);
- outputOutputChoice();
- isOutput = isUserChoice();
- outputFinalArr(isOutput, arr);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement