Advertisement
deced

Untitled

Nov 9th, 2020
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 8.75 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.nio.file.Files;
  8. import java.nio.file.Paths;
  9. import java.nio.file.StandardOpenOption;
  10. import java.util.ArrayList;
  11. import java.util.Arrays;
  12. import java.util.Scanner;
  13.  
  14. public class Main {
  15.     enum InputType {
  16.         Console, File;
  17.     }
  18.  
  19.     static int maxArraySize = 100000000;
  20.     static String outputDirectory = "output.txt";
  21.     static Scanner consoleScanner = new Scanner(System.in);
  22.     static String msgEnterInputType = "Выберите способ ввода файл/консоль (ф/к)";
  23.     static String msgEnterFilePath = "Введите путь к файлу";
  24.     static String msgNoSuchFile = "Файл не найден. Попробуйте ещё раз";
  25.     static String msgEnterArray = "Введите элементы массива, разделённые запятыми";
  26.     static String msgEnterArraySize = "Введите размер массива";
  27.     static String msgArraySizeFormatError = "Размер массива должен быть числом от 1 до " + maxArraySize;
  28.     static String msgGetOutputDirectory = "Введите директорию в которую хотите сохранить вывод";
  29.     static String msgNoSuchDirectory = "Указанная директория не найдена, попробуйте ещё раз";
  30.  
  31.     static InputType getInputType() {
  32.         InputType answer = null;
  33.         boolean isIncorrect = true;
  34.         do {
  35.             System.out.println(msgEnterInputType);
  36.             String inputLine = consoleScanner.nextLine();
  37.             if (inputLine.equalsIgnoreCase("файл") || inputLine.equalsIgnoreCase("ф")) {
  38.                 answer = InputType.File;
  39.                 isIncorrect = false;
  40.             } else if (inputLine.equalsIgnoreCase("консоль") || inputLine.equalsIgnoreCase("к")) {
  41.                 answer = InputType.Console;
  42.                 isIncorrect = false;
  43.             }
  44.         } while (isIncorrect);
  45.         return answer;
  46.     }
  47.  
  48.     static String getInputFilePath() {
  49.         String path;
  50.         boolean isIncorrect = true;
  51.         do {
  52.             System.out.println(msgEnterFilePath);
  53.             path = consoleScanner.nextLine();
  54.             File file = new File(path);
  55.             if (file.isFile() && file.exists()) {
  56.                 isIncorrect = false;
  57.             } else {
  58.                 System.out.println(msgNoSuchFile);
  59.             }
  60.         } while (isIncorrect);
  61.         return path;
  62.     }
  63.  
  64.     static int getArraySize() {
  65.         Boolean isIncorrect;
  66.         int size = 0;
  67.         do {
  68.             isIncorrect = false;
  69.             System.out.println(msgEnterArraySize);
  70.             String inputLine = consoleScanner.nextLine();
  71.             try {
  72.                 size = Integer.parseInt(inputLine);
  73.             } catch (Exception ex) {
  74.                 System.out.println(msgArraySizeFormatError);
  75.                 isIncorrect = true;
  76.             }
  77.             if ((size < 1 || size > maxArraySize) && !isIncorrect) {
  78.                 System.out.println(msgArraySizeFormatError);
  79.                 isIncorrect = true;
  80.             } else {
  81.                 isIncorrect = false;
  82.             }
  83.         } while (isIncorrect);
  84.         return size;
  85.     }
  86.  
  87.     static int[] getArrayFromConsole(int size) {
  88.         int[] inputArray = new int[size];
  89.         System.out.println(msgEnterArray);
  90.         boolean isIncorrect = false;
  91.         do {
  92.             String inputLine = consoleScanner.nextLine();
  93.             String[] splittedString = inputLine.split(",");
  94.             try {
  95.                 for (int i = 0; i < inputArray.length; i++) {
  96.                     inputArray[i] = Integer.parseInt(splittedString[i]);
  97.                 }
  98.             } catch (Exception ex) {
  99.                 System.out.println(msgEnterArray);
  100.                 isIncorrect = true;
  101.             }
  102.         } while (isIncorrect);
  103.         return inputArray;
  104.     }
  105.  
  106.     static int[] getArrayFromFile(int size) throws FileNotFoundException {
  107.         int[] inputArray = new int[size];
  108.         boolean isIncorrect = false;
  109.         do {
  110.             String filePath = getInputFilePath();
  111.             File file = new File(filePath);
  112.             Scanner fileScanner = new Scanner(file);
  113.             String inputLine = fileScanner.nextLine();
  114.             String[] splittedString = inputLine.split(",");
  115.             try {
  116.                 for (int i = 0; i < inputArray.length; i++) {
  117.                     inputArray[i] = Integer.parseInt(splittedString[i]);
  118.                 }
  119.             } catch (Exception ex) {
  120.                 System.out.println(msgEnterArray);
  121.                 isIncorrect = true;
  122.             }
  123.             fileScanner.close();
  124.         } while (isIncorrect);
  125.         return inputArray;
  126.     }
  127.  
  128.     static int[] getArray() throws FileNotFoundException {
  129.         int[] inputArray = null;
  130.         InputType inputType = getInputType();
  131.         int size = getArraySize();
  132.         if (inputType == InputType.Console) {
  133.             inputArray = getArrayFromConsole(size);
  134.         } else if (inputType == InputType.File) {
  135.             inputArray = getArrayFromFile(size);
  136.         }
  137.         return inputArray;
  138.     }
  139.  
  140.     static void initFileAndConsole() throws IOException {
  141.         File outputFile = new File(outputDirectory);
  142.         if (outputFile.exists()) {
  143.             outputFile.delete();
  144.         }
  145.         outputFile.createNewFile();
  146.         Files.write(Paths.get(outputDirectory), "Сортировка массива по этапам:\n".getBytes(), StandardOpenOption.APPEND);
  147.         System.out.println("Сортировка массива по этапам:");
  148.     }
  149.  
  150.     static void printToFile(String toPrint) throws IOException {
  151.         Files.write(Paths.get(outputDirectory), toPrint.getBytes(), StandardOpenOption.APPEND);
  152.     }
  153.  
  154.     static void printToConsole(String toPrint) {
  155.         System.out.print(toPrint);
  156.     }
  157.  
  158.     public static void printPreSorted(ArrayList<ArrayList<Integer>> toPrint) throws IOException {
  159.         StringBuilder output = new StringBuilder();
  160.         for (int i = 0; i < toPrint.size(); i++) {
  161.             output.append(Arrays.toString(toPrint.get(i).toArray()));
  162.         }
  163.         output.append("\n");
  164.         printToConsole(output.toString());
  165.         printToFile(output.toString());
  166.     }
  167.  
  168.     public static void printEndInfo() {
  169.         System.out.println("Вывод сохранён по пути " + System.getProperty("user.dir"));
  170.     }
  171.  
  172.     public static ArrayList<ArrayList<Integer>> splitArray(int[] toSplit) {
  173.         ArrayList<ArrayList<Integer>> listOfParts = new ArrayList<>();
  174.         ArrayList<Integer> part = new ArrayList<>();
  175.         for (int i = 0; i < toSplit.length; i++) {
  176.             if (part.size() == 0 || part.get(part.size() - 1) < toSplit[i]) {
  177.                 part.add(toSplit[i]);
  178.             } else {
  179.                 listOfParts.add(part);
  180.                 part = new ArrayList<>();
  181.                 part.add(toSplit[i]);
  182.             }
  183.         }
  184.         listOfParts.add(part);
  185.         return listOfParts;
  186.     }
  187.  
  188.     public static int[] ConvertListToArray(ArrayList<Integer> toConvert) {
  189.         int[] outputArray = new int[toConvert.size()];
  190.         for (int i = 0; i < toConvert.size(); i++) {
  191.             outputArray[i] = toConvert.get(i);
  192.             return outputArray;
  193.         }
  194.         return outputArray;
  195.     }
  196.  
  197.     public static int[] mergeSort(int[] toSort) throws IOException {
  198.         ArrayList<ArrayList<Integer>> listOfParts = splitArray(toSort);
  199.         while (listOfParts.size() > 1) {
  200.             printPreSorted(listOfParts);
  201.             ArrayList<Integer> newPart = new ArrayList<>();
  202.             int newPartLength = listOfParts.get(0).size() + listOfParts.get(1).size();
  203.             for (int i = 0; i < newPartLength; i++) {
  204.                 if (listOfParts.get(1).size() == 0 || (listOfParts.get(0).size() > 0 && listOfParts.get(0).get(0) < listOfParts.get(1).get(0))) {
  205.                     newPart.add(listOfParts.get(0).get(0));
  206.                     listOfParts.get(0).remove(0);
  207.                 } else {
  208.                     newPart.add(listOfParts.get(1).get(0));
  209.                     listOfParts.get(1).remove(0);
  210.                 }
  211.             }
  212.             listOfParts.remove(0);
  213.             listOfParts.set(0, newPart);
  214.         }
  215.         printPreSorted(listOfParts);
  216.         int[] sortedArray = ConvertListToArray(listOfParts.get(0));
  217.         return sortedArray;
  218.     }
  219.  
  220.     public static void main(String[] args) throws IOException {
  221.         int[] unSortedArray = getArray();
  222.         initFileAndConsole();
  223.         mergeSort(unSortedArray);
  224.         printEndInfo();
  225.     }
  226.  
  227. }
  228.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement