Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.io.*;
- public class Main {
- static Scanner scan = new Scanner(System.in);
- static final int MIN_SIZE = 2;
- static final int MAX_SIZE = 100;
- static final int MIN_ELEMENT = -2147483648;
- static final int MAX_ELEMENT = 2147483647;
- public static void main(String[] args) {
- writeTask();
- int[] arr = getArrForSort();
- System.out.println("Процесс сортировки:");
- sort(arr);
- outputSortedArr(arr);
- scan.close();
- }
- public static void writeTask() {
- System.out.println("Данная программа реализует сортировку простыми вставками");
- }
- public static int takeSizeArrFromConsole() {
- boolean isNotCorrect;
- int size = 0;
- do {
- isNotCorrect = false;
- System.out.print("Введите длину сортируемого массива: ");
- try {
- size = Integer.parseInt(scan.next());
- } catch (Exception e) {
- System.out.println("Некорректный формат размера массива.");
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE))) {
- isNotCorrect = true;
- System.out.println("Длина массива не входит в допустимый диапазон");
- }
- } while(isNotCorrect);
- return size;
- }
- public static String takePathToFile() {
- String path;
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- System.out.println("Введите путь к файлу: ");
- path = scan.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("Не удалось найти файл по заданному пути. Повторите попытку...");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return path;
- }
- public static void writeArr(int[] arr) {
- for (int i = 0; i < arr.length; i++) {
- System.out.print(arr[i] + " ");
- }
- System.out.println();
- }
- public static int[] takeArrFromConsole(int size) {
- int[] arr = new int[size];
- boolean isNotCorrect;
- for (int i = 0; i < arr.length; i++) {
- do {
- isNotCorrect = false;
- System.out.print("Введите элемент массива №" + (i + 1) + ": ");
- try {
- arr[i] = Integer.parseInt(scan.next());
- } catch (Exception e) {
- System.out.println("Элемент введён некорректно. Повторите попытку...");
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && ((arr[i] < MIN_ELEMENT) || (arr[i] > MAX_ELEMENT))) {
- System.out.println("Длина элемента массива должна быть в диапазоне от " + MIN_ELEMENT + " до " + MAX_ELEMENT);
- isNotCorrect = true;
- }
- } while(isNotCorrect);
- }
- return arr;
- }
- public static int[] takeArrFromFile() {
- System.out.print("Требуется файл для получения массива. ");
- String path = takePathToFile();
- boolean isNotCorrect;
- int size = 0;
- int[] arr = new int[0];
- do {
- isNotCorrect = false;
- int i = 0;
- try (Scanner fileReader = new Scanner(new File (path))) {
- try {
- size = Integer.parseInt(fileReader.nextLine());
- arr = new int[size];
- while ((!isNotCorrect) && (i < size)) {
- arr[i] = Integer.parseInt(fileReader.next());
- if ((arr[i] < MIN_ELEMENT) || (arr[i] > MAX_ELEMENT)) {
- isNotCorrect = true;
- System.out.print("Найден элемент массива неверного диапазона. ");
- }
- i++;
- }
- } catch (Exception e) {
- isNotCorrect = true;
- System.out.print("Найдены некорректные данные. ");
- }
- if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE))) {
- isNotCorrect = true;
- System.out.print("Размер массива не входит в доупстимый диапазон. ");
- }
- } catch (IOException ex) {
- isNotCorrect = true;
- System.out.print("Произошла ошибка при чтении файла. ");
- }
- if (isNotCorrect) {
- System.out.println("Повторите попытку...");
- path = takePathToFile();
- }
- } while (isNotCorrect);
- return arr;
- }
- public static int chooseInputOutputMethod() {
- boolean isNotCorrect;
- int choice = 0;
- do {
- isNotCorrect = false;
- try {
- choice = Integer.parseInt(scan.next());
- } catch (NumberFormatException e) {
- System.out.println("Число введено некорректно. Повторите попытку...");
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (choice != 1) && (choice != 2)) {
- System.out.print("Введите либо 1, либо 2. Ваш выбор: ");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- public static int[] getArrForSort() {
- System.out.print("Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ");
- int choice = chooseInputOutputMethod();
- int size = 0;
- int[] arr;
- if (choice == 1) {
- size = takeSizeArrFromConsole();
- arr = takeArrFromConsole(size);
- }
- else {
- arr = takeArrFromFile();
- }
- System.out.print("Полученный массив: ");
- writeArr(arr);
- return arr;
- }
- public static int[] sort(int[] arr) {
- int[] newArr = arr;
- int i, j, x;
- for (i = 1; i < newArr.length; i++) {
- x = newArr[i];
- j = i;
- while ((j > 0) && (newArr[j - 1] > x)) {
- newArr[j] = newArr[j - 1];
- j--;
- }
- newArr[j] = x;
- writeArr(newArr);
- }
- return newArr;
- }
- public static void outputSortedArrInFile(int[] arr) {
- System.out.print("Требуется файл для записи отсортированного массива. ");
- String path = takePathToFile();
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- try (FileWriter fileWriter = new FileWriter(new File (path))) {
- fileWriter.write("Полученный массив: ");
- for (int i = 0; i < arr.length; i++) {
- fileWriter.write(arr[i] + " ");
- }
- } catch (IOException ex) {
- isNotCorrect = true;
- System.out.print("Произошла ошибка записи в файл. ");
- }
- if (isNotCorrect) {
- System.out.println("Повторите попытку...");
- path = takePathToFile();
- }
- } while(isNotCorrect);
- System.out.println("Ответ записан в файл!");
- }
- public static void outputSortedArr(int[] arr) {
- System.out.print("Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ");
- int choice = chooseInputOutputMethod();
- if (choice == 1) {
- System.out.print("Полученный массив: ");
- writeArr(arr);
- }
- else {
- outputSortedArrInFile(arr);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement