Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package dev.rexe;
- import java.io.*;
- import java.util.Arrays;
- import java.util.Scanner;
- public class Main3 {
- public final static String DEFAULT_INPUT_FILE = "input.txt";
- public final static String DEFAULT_OUTPUT_FILE = "output.txt";
- public final static int PRINT_TYPE_MIN = 0;
- public final static int PRINT_TYPE_MAX = 2;
- public final static int SCAN_TYPE_MIN = 0;
- public final static int SCAN_TYPE_MAX = 1;
- public final static int ARRAY_LENGTH_MIN = 1;
- public final static int ARRAY_LENGTH_MAX = 1000;
- public final static int ARRAY_VALUES_MIN = -10000;
- public final static int ARRAY_VALUES_MAX = 10000;
- public static void main(String[] args) {
- System.out.println("3. Сортировка методом простых вставок.");
- Scanner scanner = new Scanner(System.in);
- int[] arr;
- arr = Main3.readArray(scanner);
- Main3.sortArray(arr);
- Main3.printResult(scanner, arr);
- scanner.close();
- }
- public static boolean checkFileAvailability(String filePath, boolean read) {
- boolean fl;
- fl = true;
- try {
- File file = new File(filePath);
- if (!read) {
- BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file));
- fileWriter.close();
- } else {
- BufferedReader fileReader = new BufferedReader(new FileReader(file));
- fileReader.close();
- }
- } catch (Exception e) {
- fl = false;
- }
- if (!isTextFile(filePath)) {
- fl = false;
- }
- return fl;
- }
- public static boolean isTextFile(String filePath) {
- boolean isTxt;
- isTxt = (filePath.length() > 4 &&
- filePath.charAt(filePath.length() - 4) == '.' &&
- filePath.charAt(filePath.length() - 3) == 't' &&
- filePath.charAt(filePath.length() - 2) == 'x' &&
- filePath.charAt(filePath.length() - 1) == 't');
- return isTxt;
- }
- public static int[] readArray(Scanner scanner) {
- int[] arr;
- int type;
- System.out.println("\nКак считать значения для поиска решения?");
- System.out.println("0 - Из ввода с клавиатуры (консоль)");
- System.out.println("1 - Из файла");
- type = takeIntValueInRangeFromConsole(scanner, "Выбранный вариант ввода: ", SCAN_TYPE_MIN, SCAN_TYPE_MAX);
- if (type == 1) {
- arr = readArrayFromFile(scanner);
- } else {
- arr = readArrayFromConsole(scanner);
- }
- return arr;
- }
- public static int[] readArrayFromFile(Scanner scanner) {
- int[] a;
- a = new int[0];
- boolean isInCorrect = true;
- while (isInCorrect) {
- File file = takeCorrectFile(scanner, true);
- isInCorrect = false;
- try {
- BufferedReader reader = new BufferedReader(new FileReader(file));
- int n = Integer.parseInt(takeValueFromFile(reader));
- if (n > ARRAY_LENGTH_MIN && n < ARRAY_LENGTH_MAX) {
- a = new int[n];
- for (int i = 0; i < n; i++) {
- String aString = takeValueFromFile(reader);
- int value = Integer.parseInt(aString);
- if (value < ARRAY_VALUES_MIN || value > ARRAY_VALUES_MAX)
- aString = "e";
- a[i] = Integer.parseInt(aString);
- }
- } else {
- isInCorrect = true;
- System.out.println("Массив не может быть размером меньше, чем " + ARRAY_LENGTH_MIN + "!");
- }
- reader.close();
- } catch (IOException e) {
- isInCorrect = true;
- System.out.println("Этот файл не существует! Введите путь до существующего файла!");
- } catch (NumberFormatException e) {
- isInCorrect = true;
- System.out.println("В файле содержится неверные значения! Введите путь до файла с верным содержимым!");
- }
- }
- return a;
- }
- public static int[] readArrayFromConsole(Scanner scanner) {
- int[] a;
- int n = takeIntValueInRangeFromConsole(scanner, "Введите длину массива (значение должно быть в границах от " + ARRAY_LENGTH_MIN + " и до " + ARRAY_LENGTH_MAX + "): ", ARRAY_LENGTH_MIN, ARRAY_LENGTH_MAX);
- a = new int[n];
- for (int i = 0; i < n; i++)
- a[i] = takeIntValueInRangeFromConsole(scanner, "Элемент " + (i + 1) + " массива (значение должно быть в границах от " + ARRAY_VALUES_MIN + " и до " + ARRAY_VALUES_MAX + "): ", ARRAY_VALUES_MIN, ARRAY_VALUES_MAX);
- return a;
- }
- public static String takeValueFromFile(BufferedReader reader) {
- boolean isValue;
- StringBuilder value;
- value = new StringBuilder("e");
- isValue = true;
- try {
- while (isValue) {
- int c = reader.read();
- if (c != -1 && c != '\n' && c != ' ') {
- if (value.toString().equals("e"))
- value = new StringBuilder();
- value.append((char) c);
- } else
- isValue = false;
- }
- } catch (IOException ignored) {}
- return value.toString();
- }
- public static int takeIntValueFromConsole(Scanner scanner, String text) {
- boolean isInCorrect;
- int value;
- isInCorrect = true;
- value = 0;
- while (isInCorrect) {
- System.out.print(text);
- try {
- value = Integer.parseInt(scanner.nextLine());
- isInCorrect = false;
- } catch (NumberFormatException e) {
- System.out.println("Введите число, а не строку или что-то иное!");
- }
- }
- return value;
- }
- public static int takeIntValueInRangeFromConsole(Scanner scanner, String text, int min, int max) {
- boolean isInCorrect;
- int value;
- isInCorrect = true;
- value = 0;
- while (isInCorrect) {
- value = takeIntValueFromConsole(scanner, text);
- isInCorrect = false;
- if (value < min || value > max) {
- isInCorrect = true;
- System.out.println("Значение должно находится в границах от " + min + " до " + max + "!");
- }
- }
- return value;
- }
- public static File takeCorrectFile(Scanner scanner, boolean input) {
- boolean isInCorrect;
- String value = "";
- isInCorrect = true;
- while(isInCorrect) {
- if (input)
- System.out.print("Введите путь до входного файла (пустая строка – " + DEFAULT_INPUT_FILE + "): ");
- else
- System.out.print("Введите путь до выходного файла (пустая строка – " + DEFAULT_OUTPUT_FILE + "): ");
- value = scanner.nextLine();
- isInCorrect = false;
- if (value.isEmpty()) {
- if (input)
- value = DEFAULT_INPUT_FILE;
- else
- value = DEFAULT_OUTPUT_FILE;
- }
- if (!checkFileAvailability(value, input)) {
- isInCorrect = true;
- System.out.println("Путь ведёт до файла, который недоступен или который не является текстовым файлом!");
- }
- }
- return new File(value);
- }
- public static void printResult(Scanner scanner, int[] arr) {
- boolean saved;
- int type;
- System.out.println("\nКуда вывести результат решения?");
- System.out.println("0 - Только консоль");
- System.out.println("1 - Только в файл");
- System.out.println("2 - И в файл, и в консоль");
- type = takeIntValueInRangeFromConsole(scanner, "Выбранный вариант вывода: ", PRINT_TYPE_MIN, PRINT_TYPE_MAX);
- saved = false;
- switch (type) {
- case 0 -> {
- printResultIntoConsole(arr);
- }
- case 1 -> {
- File output = takeCorrectFile(scanner, false);
- saved = saveResultIntoFile(output, arr);
- }
- case 2 -> {
- File output = takeCorrectFile(scanner, false);
- saved = saveResultIntoFile(output, arr);
- printResultIntoConsole(arr);
- }
- }
- if (saved)
- System.out.println("Результат записан в выходной файл!");
- }
- public static void printResultIntoConsole(int[] arr) {
- System.out.println("\nОтсортированный массив:");
- for (int j : arr)
- System.out.print(j + " ");
- System.out.println();
- }
- public static boolean saveResultIntoFile(File output, int[] arr) {
- boolean saved;
- saved = true;
- try {
- BufferedWriter writer = new BufferedWriter(new FileWriter(output));
- StringBuilder numbers = new StringBuilder();
- for (int j : arr)
- numbers.append(j).append(" ");
- writer.append(numbers.toString());
- writer.close();
- } catch (IOException e) {
- System.out.println("Данные в файл не могут быть записаны! У программы нет доступа к файлу или он занят другим процессом!");
- saved = false;
- }
- return saved;
- }
- public static void sortArray(int[] arr) {
- System.out.println(Arrays.toString(arr) + "; i = 0");
- for (int i = 1; i < arr.length; i++) {
- int key = arr[i];
- int j = i - 1;
- while (j >= 0 && arr[j] > key) {
- arr[j + 1] = arr[j];
- j = j - 1;
- }
- arr[j + 1] = key;
- System.out.println(Arrays.toString(arr) + "; i = " + i);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment