Advertisement
THOMAS_SHELBY_18

Lab3_3(JAVA)

Nov 20th, 2023
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.99 KB | Source Code | 0 0
  1. package com.company;
  2. import java.util.NoSuchElementException;
  3. import java.util.Scanner;
  4. import java.io.*;
  5. public class Main {
  6.  
  7.     private static final Scanner scan = new Scanner(System.in);
  8.     private static int readNum(int min, int max) {
  9.         int n;
  10.         boolean isIncorrect;
  11.         n = 0;
  12.         do {
  13.             isIncorrect = false;
  14.             try {
  15.                 n = Integer.parseInt(scan.nextLine());
  16.             }
  17.             catch (Exception err) {
  18.                 System.out.println("Вы ввели некорректные данные. Попробуйте снова");
  19.                 isIncorrect = true;
  20.             }
  21.             if (!isIncorrect && (n < min || n > max)) {
  22.                 System.out.println("Введено значение не входящее в диапазон допустимых значений");
  23.                 isIncorrect = true;
  24.             }
  25.         } while (isIncorrect);
  26.         return n;
  27.     }
  28.     private static void printCondition() {
  29.         final int MIN_ARR_LENGTH = 1, MAX_ARR_LENGTH = 10, MIN_ARR_VALUE = -1000, MAX_ARR_VALUE = 1000;
  30.         System.out.println("Данная программа сортирует массив методом простых вставок.");
  31.         System.out.println("Диапазон значений для длины массива - от " + MIN_ARR_LENGTH + " до " + MAX_ARR_LENGTH + ".");
  32.         System.out.println("Диапазон значений для элементов массива - от " + MIN_ARR_VALUE + " до " + MAX_ARR_VALUE + ".");
  33.     }
  34.     private static int[] inputArr() {
  35.         int choice;
  36.         int[] arr;
  37.  
  38.         System.out.println("Выберите вариант ввода:");
  39.         System.out.println("1.Ввод из консоли");
  40.         System.out.println("2.Ввод из файла");
  41.         choice = readNum(1, 2);
  42.  
  43.         if (choice == 1) {
  44.             arr = inputArrFromConsole();
  45.         }
  46.         else {
  47.             arr = inputArrFromFile();
  48.         }
  49.  
  50.         return arr;
  51.     }
  52.     private static int[] inputArrFromConsole() {
  53.         final int MIN_ARR_LENGTH = 1, MAX_ARR_LENGTH = 10, MIN_ARR_VALUE = -1000, MAX_ARR_VALUE = 1000;
  54.         int len;
  55.         int[] arr;
  56.  
  57.         System.out.println("Число элементов массива: ");
  58.         len = readNum(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
  59.         arr = new int[len];
  60.  
  61.         System.out.println("Введите массив для сортировки");
  62.         for (int i = 0; i < arr.length; i++) {
  63.             System.out.println("Введите элемент массива " + (i + 1) + ": ");
  64.             arr[i] = readNum(MIN_ARR_VALUE, MAX_ARR_VALUE);
  65.         }
  66.         return arr;
  67.     }
  68.     private static int[] inputArrFromFile() {
  69.         String pathFile;
  70.         int[] arr;
  71.         boolean isInputFromFileSuccessfully;
  72.  
  73.         System.out.println("Данные в файле должны содержать количество элементов в первой строке и элементы массива во второй строке");
  74.         do {
  75.             System.out.print("Введите путь к файлу и его имя с его раширением:");
  76.             pathFile = scan.nextLine();
  77.             isInputFromFileSuccessfully = checkFile(pathFile);
  78.         } while(!isInputFromFileSuccessfully);
  79.  
  80.         arr = readFile(pathFile);
  81.  
  82.         return arr;
  83.     }
  84.     private static boolean checkFile(String path){
  85.         final int MIN_ARR_LENGTH = 1, MAX_ARR_LENGTH = 10, MIN_ARR_VALUE = -1000, MAX_ARR_VALUE = 1000;
  86.         int buf, len;
  87.         boolean isFileCorrect;
  88.         File checkFile;
  89.  
  90.         checkFile = new File(path);
  91.         isFileCorrect = true;
  92.  
  93.         if (!checkFile.isFile()) {
  94.             System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново");
  95.             isFileCorrect = false;
  96.         }
  97.         if (isFileCorrect && !checkFile.canRead() ) {
  98.             System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново");
  99.             isFileCorrect = false;
  100.         }
  101.         if (isFileCorrect){
  102.             try (Scanner fileScan = new Scanner(checkFile)) {
  103.                 len = fileScan.nextInt();
  104.                 if (len <= MAX_ARR_LENGTH && len >= MIN_ARR_LENGTH) {
  105.                     for (int i = 0; i < len; i++) {
  106.                         buf = fileScan.nextInt();
  107.                         if ((buf > MAX_ARR_VALUE || buf < MIN_ARR_VALUE)) {
  108.                             System.out.println("В файле данные выходят за пределы допустимых значений. Пожалуйста проверьте файл и введите путь заново");
  109.                             isFileCorrect = false;
  110.                         }
  111.                     }
  112.                 } else {
  113.                     System.out.println("В файле данные выходят за пределы допустимых значений. Пожалуйста проверьте файл и введите путь заново");
  114.                     isFileCorrect = false;
  115.                 }
  116.                 if (isFileCorrect && fileScan.hasNext()){
  117.                     System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  118.                     isFileCorrect = false;
  119.                 }
  120.             } catch (FileNotFoundException e) {
  121.                 System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново");
  122.                 isFileCorrect = false;
  123.             } catch (NoSuchElementException e) {
  124.                 System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  125.                 isFileCorrect = false;
  126.             }
  127.         }
  128.         return isFileCorrect;
  129.     }
  130.     private static int[] readFile(String path){
  131.         int[] arr;
  132.         int len, buf;
  133.         File file;
  134.  
  135.         arr = null;
  136.         file = new File(path);
  137.  
  138.         try (Scanner fileScan = new Scanner(file)) {
  139.             len = fileScan.nextInt();
  140.             arr = new int[len];
  141.             for (int i = 0; i < len; i++) {
  142.                 buf = fileScan.nextInt();
  143.                 arr[i] = buf;
  144.             }
  145.         } catch (IOException e) {
  146.             System.out.println("Не удалось считать файл");
  147.         }
  148.         return arr;
  149.     }
  150.     private static int[] sortArr(int[] arr) {
  151.         int i, j, buff;
  152.         for (i = 1; i < arr.length; i++) {
  153.             buff = arr[i];
  154.             j = i;
  155.             while ((j > 0) && (arr[j - 1] > buff)) {
  156.                 arr[j] = arr[j - 1];
  157.                 j--;
  158.             }
  159.             arr[j] = buff;
  160.         }
  161.         return arr;
  162.     }
  163.     private static void outputArr(int[] arr) {
  164.         int choice;
  165.  
  166.         System.out.println("Выберите вариант вывода:");
  167.         System.out.println("1.Вывод в консоль");
  168.         System.out.println("2.Вывод в файл");
  169.         choice = readNum(1, 2);
  170.  
  171.         if (choice == 1) {
  172.             outputArrToConsole(arr);
  173.         }
  174.         else {
  175.             outputArrToFile(arr);
  176.         }
  177.     }
  178.  
  179.     private static void outputArrToConsole(int[] arr) {
  180.         int i;
  181.         for (i = 0; i < arr.length; i++){
  182.             System.out.print(arr[i] + " ");
  183.         }
  184.     }
  185.  
  186.     private static void outputArrToFile(int[] arr) {
  187.         String path;
  188.         boolean isFileIncorrect;
  189.         int i;
  190.  
  191.         System.out.println("Для вывода введите путь к файлу.");
  192.         System.out.println("Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)");
  193.         do {
  194.             isFileIncorrect = false;
  195.             System.out.print("Введите путь к файлу и его имя c расширением: ");
  196.             path = scan.nextLine();
  197.             File outputFile = new File(path);
  198.             try {
  199.                 if (outputFile.isFile()) {
  200.                     if (outputFile.canWrite()) {
  201.                         try (FileWriter writer = new FileWriter(outputFile)) {
  202.                             for (i = 0; i < arr.length; i++){
  203.                                 writer.write(arr[i] + " ");
  204.                             }
  205.                         }
  206.                     }
  207.                     else {
  208.                         System.out.println("Файл доступен только для чтения!");
  209.                         isFileIncorrect = true;
  210.                     }
  211.                 }
  212.                 else {
  213.                     outputFile.createNewFile();
  214.                     try (FileWriter writer = new FileWriter(outputFile)) {
  215.                         for (i = 0; i < arr.length; i++){
  216.                             writer.write(arr[i] + " ");
  217.                         }
  218.                     }
  219.                 }
  220.             }
  221.             catch (IOException e) {
  222.                 System.out.println("Не удалось вывести в файл!");
  223.                 isFileIncorrect = true;
  224.             }
  225.         } while (isFileIncorrect);
  226.         System.out.println("Вывод данных... успешно!");
  227.     }
  228.     public static void main(String[] args) {
  229.         int[] numArr;
  230.         printCondition();
  231.         numArr = inputArr();
  232.         numArr = sortArr(numArr);
  233.         outputArr(numArr);
  234.         scan.close();
  235.     }
  236. }
  237.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement