Advertisement
ksyshshot

Lab.3.3

Nov 29th, 2022 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.50 KB | Source Code | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.  
  6.     static Scanner scan = new Scanner(System.in);
  7.     static final int MIN_SIZE = 2;
  8.     static final int MAX_SIZE = 100;
  9.     static final int MIN_ELEMENT = -2147483648;
  10.     static final int MAX_ELEMENT = 2147483647;
  11.  
  12.     public static void main(String[] args) {
  13.         writeTask();
  14.         int[] arr = getArrForSort();
  15.         System.out.println("Процесс сортировки:");
  16.         sort(arr);
  17.         outputSortedArr(arr);
  18.         scan.close();
  19.     }
  20.  
  21.     public static void writeTask() {
  22.         System.out.println("Данная программа реализует сортировку простыми вставками");
  23.     }
  24.  
  25.     public static int takeSizeArrFromConsole() {
  26.         boolean isNotCorrect;
  27.         int size = 0;
  28.         do {
  29.             isNotCorrect = false;
  30.             System.out.print("Введите длину сортируемого массива: ");
  31.             try {
  32.                 size = Integer.parseInt(scan.next());
  33.             } catch (Exception e) {
  34.                 System.out.println("Некорректный формат размера массива.");
  35.                 isNotCorrect = true;
  36.             }
  37.             if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE))) {
  38.                 isNotCorrect = true;
  39.                 System.out.println("Длина массива не входит в допустимый диапазон");
  40.             }
  41.         } while(isNotCorrect);
  42.         return size;
  43.     }
  44.  
  45.     public static String takePathToFile() {
  46.         String path;
  47.         boolean isNotCorrect;
  48.         do {
  49.             isNotCorrect = false;
  50.             System.out.println("Введите путь к файлу: ");
  51.             path = scan.nextLine();
  52.             File file = new File(path);
  53.             if (!file.exists()) {
  54.                 System.out.println("Не удалось найти файл по заданному пути. Повторите попытку...");
  55.                 isNotCorrect = true;
  56.             }
  57.         } while (isNotCorrect);
  58.         return path;
  59.     }
  60.  
  61.     public static void writeArr(int[] arr) {
  62.         for (int i = 0; i < arr.length; i++) {
  63.             System.out.print(arr[i] + " ");
  64.         }
  65.         System.out.println();
  66.     }
  67.  
  68.     public static int[] takeArrFromConsole(int size) {
  69.         int[] arr = new int[size];
  70.         boolean isNotCorrect;
  71.         for (int i = 0; i < arr.length; i++) {
  72.             do {
  73.                 isNotCorrect = false;
  74.                 System.out.print("Введите элемент массива №" + (i + 1) + ": ");
  75.                 try {
  76.                     arr[i] = Integer.parseInt(scan.next());
  77.                 } catch (Exception e) {
  78.                     System.out.println("Элемент введён некорректно. Повторите попытку...");
  79.                     isNotCorrect = true;
  80.                 }
  81.                 if ((!isNotCorrect) && ((arr[i] < MIN_ELEMENT) || (arr[i] > MAX_ELEMENT))) {
  82.                     System.out.println("Длина элемента массива должна быть в диапазоне от " + MIN_ELEMENT + " до " + MAX_ELEMENT);
  83.                     isNotCorrect = true;
  84.                 }
  85.             } while(isNotCorrect);
  86.         }
  87.         return arr;
  88.     }
  89.  
  90.     public static int[] takeArrFromFile() {
  91.         System.out.print("Требуется файл для получения массива. ");
  92.         String path = takePathToFile();
  93.         boolean isNotCorrect;
  94.         int size = 0;
  95.         int[] arr = new int[0];
  96.         do {
  97.             isNotCorrect = false;
  98.             int i = 0;
  99.             try (Scanner fileReader = new Scanner(new File (path))) {
  100.                 try {
  101.                     size = Integer.parseInt(fileReader.nextLine());
  102.                     arr = new int[size];
  103.                     while ((!isNotCorrect) && (i < size)) {
  104.                         arr[i] = Integer.parseInt(fileReader.next());
  105.                         if ((arr[i] < MIN_ELEMENT) || (arr[i] > MAX_ELEMENT)) {
  106.                             isNotCorrect = true;
  107.                             System.out.print("Найден элемент массива неверного диапазона. ");
  108.                         }
  109.                         i++;
  110.                     }
  111.                 } catch (Exception e) {
  112.                     isNotCorrect = true;
  113.                     System.out.print("Найдены некорректные данные. ");
  114.                 }
  115.                 if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE))) {
  116.                     isNotCorrect = true;
  117.                     System.out.print("Размер массива не входит в доупстимый диапазон. ");
  118.                 }
  119.             } catch (IOException ex) {
  120.                 isNotCorrect = true;
  121.                 System.out.print("Произошла ошибка при чтении файла. ");
  122.             }
  123.             if (isNotCorrect) {
  124.                 System.out.println("Повторите попытку...");
  125.                 path = takePathToFile();
  126.             }
  127.         } while (isNotCorrect);
  128.         return arr;
  129.     }
  130.  
  131.     public static int chooseInputOutputMethod() {
  132.         boolean isNotCorrect;
  133.         int choice = 0;
  134.         do {
  135.             isNotCorrect = false;
  136.             try {
  137.                 choice = Integer.parseInt(scan.next());
  138.             } catch (NumberFormatException e) {
  139.                 System.out.println("Число введено некорректно. Повторите попытку...");
  140.                 isNotCorrect = true;
  141.             }
  142.             if ((!isNotCorrect) && (choice != 1) && (choice != 2)) {
  143.                 System.out.print("Введите либо 1, либо 2. Ваш выбор: ");
  144.                 isNotCorrect = true;
  145.             }
  146.         } while (isNotCorrect);
  147.         return choice;
  148.     }
  149.  
  150.     public static int[] getArrForSort() {
  151.         System.out.print("Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ");
  152.         int choice = chooseInputOutputMethod();
  153.         int size = 0;
  154.         int[] arr;
  155.         if (choice == 1) {
  156.             size = takeSizeArrFromConsole();
  157.             arr = takeArrFromConsole(size);
  158.         }
  159.         else {
  160.             arr = takeArrFromFile();
  161.         }
  162.         System.out.print("Полученный массив: ");
  163.         writeArr(arr);
  164.         return arr;
  165.     }
  166.  
  167.     public static int[] sort(int[] arr) {
  168.         int[] newArr = arr;
  169.         int i, j, x;
  170.         for (i = 1; i < newArr.length; i++) {
  171.             x = newArr[i];
  172.             j = i;
  173.             while ((j > 0) && (newArr[j - 1] > x)) {
  174.                 newArr[j] = newArr[j - 1];
  175.                 j--;
  176.             }
  177.             newArr[j] = x;
  178.             writeArr(newArr);
  179.         }
  180.         return newArr;
  181.     }
  182.  
  183.     public static void outputSortedArrInFile(int[] arr) {
  184.         System.out.print("Требуется файл для записи отсортированного массива. ");
  185.         String path = takePathToFile();
  186.         boolean isNotCorrect;
  187.         do {
  188.             isNotCorrect = false;
  189.             try (FileWriter fileWriter = new FileWriter(new File (path))) {
  190.                 fileWriter.write("Полученный массив: ");
  191.                 for (int i = 0; i < arr.length; i++) {
  192.                     fileWriter.write(arr[i] + " ");
  193.                 }
  194.             } catch (IOException ex) {
  195.                 isNotCorrect = true;
  196.                 System.out.print("Произошла ошибка записи в файл. ");
  197.             }
  198.             if (isNotCorrect) {
  199.                 System.out.println("Повторите попытку...");
  200.                 path = takePathToFile();
  201.             }
  202.         } while(isNotCorrect);
  203.         System.out.println("Ответ записан в файл!");
  204.     }
  205.  
  206.     public static void outputSortedArr(int[] arr) {
  207.         System.out.print("Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ");
  208.         int choice = chooseInputOutputMethod();
  209.         if (choice == 1) {
  210.             System.out.print("Полученный массив: ");
  211.             writeArr(arr);
  212.         }
  213.         else {
  214.             outputSortedArrInFile(arr);
  215.         }
  216.     }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement