Advertisement
VadimThink

Untitled

Dec 9th, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.51 KB | None | 0 0
  1. package com.Laba3_3;
  2.  
  3. import java.io.*;
  4. import java.util.Scanner;
  5.  
  6. public class Main {
  7.     public static Scanner in = new Scanner(System.in);
  8.  
  9.     static int getArraySize() {
  10.         final int MAXSIZE = 101, MINSIZE = 1;
  11.         boolean isCorrect = true;
  12.         int sizeOfArray = 0;
  13.         System.out.println("Введите количество элементов массива, число должно быть больше " + MINSIZE + " но меньше " + MAXSIZE);
  14.         do {
  15.             if (in.hasNextInt()) {
  16.                 sizeOfArray = in.nextInt();
  17.                 isCorrect = false;
  18.             } else {
  19.                 System.out.println("Число должно быть целым!");
  20.             }
  21.             if (MINSIZE > sizeOfArray || MAXSIZE < sizeOfArray) {
  22.                 System.out.println("Проверьте границы допустимых значений");
  23.                 isCorrect = true;
  24.             }
  25.         } while (isCorrect);
  26.         return sizeOfArray;
  27.     }
  28.  
  29.     static int[] input(int sizeOfArray) {
  30.         boolean isCorrect;
  31.         int[] arrayOfInt = new int[sizeOfArray];
  32.         System.out.println("Если ввод массива будет осуществляться с клавиатуры, напишите букву K, если из файла - букву F");
  33.         do {
  34.             isCorrect = true;
  35.             String inputKeyboardOrFile = in.nextLine();
  36.             switch (inputKeyboardOrFile) {
  37.                 case "K":
  38.                     arrayOfInt = getArrayFromKeyboard(sizeOfArray);
  39.                     isCorrect = false;
  40.                     break;
  41.                 case "F":
  42.                     arrayOfInt = getArrayFromFile(sizeOfArray);
  43.                     isCorrect = false;
  44.                     break;
  45.                 default:
  46.                     System.out.println("Введите, пожалуйста, K или F");
  47.             }
  48.         } while (isCorrect);
  49.         return arrayOfInt;
  50.     }
  51.  
  52.     static int[] getArrayFromKeyboard(int sizeOfArray) {
  53.         final int
  54.                 MINNUMB = -51, MAXNUMB = 51;
  55.         boolean isCorrect = true;
  56.         int[] arrayOfInt = new int[sizeOfArray];
  57.         int temp = sizeOfArray + 1;
  58.         for (int i = 0; i < sizeOfArray; i++) {
  59.             do {
  60.                 System.out.println("Введите " + i + " элемент массива. Он должен быть больше " + MINNUMB + " но меньше " + MAXNUMB);
  61.                 if (in.hasNextInt()) {
  62.                     arrayOfInt[i] = in.nextInt();
  63.                     isCorrect = false;
  64.                 } else {
  65.                     System.out.println("Число должно быть целым!");
  66.                 }
  67.                 if (arrayOfInt[i] < MINNUMB || arrayOfInt[i] > MAXNUMB) {
  68.                     isCorrect = true;
  69.                     System.out.println("Проверьте границы допустимых значений!");
  70.                 }
  71.             } while (isCorrect);
  72.         }
  73.         return arrayOfInt;
  74.     }
  75.  
  76.     static int[] getArrayFromFile(int sizeOfArray) {
  77.         boolean isInvalidInput = true;
  78.         String text = " ";
  79.         int[] arrayOfInt = new int[sizeOfArray];
  80.         do {
  81.             isInvalidInput = false;
  82.             System.out.println("Введите название файла, например C:\\Users\\Think\\Desktop\\Input.txt");
  83.             String fileName = in.nextLine();
  84.             try {
  85.                 BufferedReader input = new BufferedReader(new FileReader(fileName));
  86.                 text = input.readLine();
  87.                 input.close();
  88.                 String[] subStr = text.split(" ");
  89.                 for (int i = 0; i < subStr.length; i++) {
  90.                     arrayOfInt[i] = Integer.parseInt(subStr[i]);
  91.                 }
  92.             } catch (FileNotFoundException e) {
  93.                 System.out.println("Такой файл не найден, попробуйте заново");
  94.                 isInvalidInput = true;
  95.             } catch (IOException e) {
  96.                 System.out.println("Этот файл не может быть открыт, попробуйте заново");
  97.                 isInvalidInput = true;
  98.             }
  99.         } while (isInvalidInput);
  100.         return arrayOfInt;
  101.     }
  102.  
  103.     static int[] binarySorting(int[] arrayOfInt, int sizeOfArray) {
  104.         int tempMinus, currentElement, leftSide, rightSide, middle, tempPlus;
  105.         for (int i = 1; i < sizeOfArray; i++) {
  106.             currentElement = arrayOfInt[i];
  107.             leftSide = 0;
  108.             rightSide = i - 1;
  109.             while (leftSide <= rightSide) {
  110.                 middle = (leftSide + rightSide) / 2;
  111.                 tempPlus = middle + 1;
  112.                 tempMinus = middle - 1;
  113.                 if (currentElement < arrayOfInt[middle]) {
  114.                     rightSide = tempMinus;
  115.                 } else {
  116.                     leftSide = tempPlus;
  117.                 }
  118.             }
  119.             tempMinus = i - 1;
  120.             for (int j = tempMinus; i > leftSide - 1; i--) {
  121.                 arrayOfInt[j + 1] = arrayOfInt[j];
  122.             }
  123.             arrayOfInt[leftSide] = currentElement;
  124.         }
  125.         return arrayOfInt;
  126.     }
  127.  
  128.     static void output(int[] arrayOfInt, int sizeOfArray) {
  129.         System.out.println("-------------------------------------------------------");
  130.         System.out.println("Отсортированный массив:\n");
  131.         int temp = sizeOfArray + 1;
  132.         for (int i = 0; i < temp; i++) {
  133.             System.out.print(arrayOfInt[i] + " ");
  134.         }
  135.         System.out.println("\n");
  136.         System.out.println("-------------------------------------------------------");
  137.         System.out.println("Вы хотите записать результат в файл? Если да - введите Y, если нет - введите N ");
  138.         boolean isCorrect = true;
  139.         do {
  140.             String chooseOutput = in.nextLine();
  141.             switch (chooseOutput) {
  142.                 case "Y":
  143.                     saveToFile(arrayOfInt, sizeOfArray);
  144.                     System.out.println("Результат был записан в файл");
  145.                     isCorrect = false;
  146.                     break;
  147.                 case "N":
  148.                     System.out.println("Результат не был записан в файл");
  149.                     isCorrect = false;
  150.                     break;
  151.                 default:
  152.                     System.out.println("Пожалуйста, введите Y или N");
  153.             }
  154.         } while (isCorrect);
  155.     }
  156.  
  157.     static void saveToFile(int[] arrayOfInt, int sizeOfArray) {
  158.         System.out.println("Введите, пожалуйста, путь к файлу, например: C:\\Users\\Think\\Desktop\\Output.txt");
  159.         String path = in.nextLine();
  160.         try (FileWriter writer = new FileWriter(path, false)) {
  161.             writer.write("Отсортированный массив:");
  162.             int temp = sizeOfArray + 1;
  163.             for (int i = 0; i < temp; i++) {
  164.                 writer.write(arrayOfInt[i] + " ");
  165.             }
  166.         } catch (IOException e) {
  167.             System.out.println("Файл невозможно открыть");
  168.         }
  169.     }
  170.  
  171.     public static void main(String[] args) {
  172.         System.out.println("Эта программа выполняет сортировку массива бинарными вставками");
  173.         int sizeOfArray = getArraySize();
  174.         int[] arrayOfInt = input(sizeOfArray);
  175.         System.out.println("\n");
  176.         binarySorting(arrayOfInt, sizeOfArray);
  177.         output(arrayOfInt, sizeOfArray);
  178.     }
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement