Advertisement
deced

Untitled

Oct 22nd, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.18 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8.  
  9. public class Main {
  10.  
  11.     static Scanner scanner;
  12.  
  13.     static String getInputType() {
  14.         String ret = "";
  15.         boolean isIncorrect;
  16.         String inputLine = "";
  17.         isIncorrect = true;
  18.         do {
  19.             System.out.println("Выберите способ задания матрицы файл/консоль (ф/к)");
  20.             inputLine = scanner.nextLine();
  21.             if (inputLine.equalsIgnoreCase("файл") || inputLine.equalsIgnoreCase("ф")) {
  22.                 ret = "File";
  23.                 isIncorrect = false;
  24.             } else if (inputLine.equalsIgnoreCase("консоль") || inputLine.equalsIgnoreCase("к")) {
  25.                 ret = "Console";
  26.                 isIncorrect = false;
  27.             }
  28.  
  29.         } while (isIncorrect);
  30.         return ret;
  31.     }
  32.  
  33.     static int getMatrixItem(int i, int j) {
  34.         int ret = 0;
  35.         boolean isIncorrect;
  36.         String inputLine;
  37.         do {
  38.             System.out.println("Введите значение элемента матрицы [" + i + "," + j + "] ");
  39.             inputLine = scanner.nextLine();
  40.             isIncorrect = false;
  41.             try {
  42.                 ret = Integer.parseInt(inputLine);
  43.             } catch (Exception ex) {
  44.                 System.out.println("Значение матрицы должно быть числом\n");
  45.                 isIncorrect = true;
  46.             }
  47.         } while (isIncorrect);
  48.         return ret;
  49.     }
  50.  
  51.     static int[][] getMatrixFromConsole(int size) {
  52.         int[][] ret = new int[size][size];
  53.         for (int i = 0; i < size; i++) {
  54.             for (int j = 0; j < size; j++) {
  55.                 ret[i][j] = getMatrixItem(i, j);
  56.             }
  57.         }
  58.         return ret;
  59.     }
  60.  
  61.     static boolean isFileCorrect(String path, int size) throws IOException {
  62.         int totalCount = 0;
  63.         boolean isCorrect;
  64.         FileReader reader = new FileReader(path);
  65.         Scanner scanner = new Scanner(reader);
  66.         isCorrect = true;
  67.         while (scanner.hasNextLine() && isCorrect) {
  68.             Matcher matcherDigit = Pattern.compile("\\d+").matcher(scanner.nextLine());
  69.             Matcher matcherSymbol = Pattern.compile("\\w+").matcher(scanner.nextLine());
  70.             int thisLineCount = 0;
  71.             if (matcherSymbol.find())
  72.                 isCorrect = false;
  73.             while (matcherDigit.find()) {
  74.                 thisLineCount++;
  75.                 totalCount++;
  76.             }
  77.             if (thisLineCount != size && totalCount != size * size) {
  78.                 isCorrect = false;
  79.             }
  80.         }
  81.         scanner.close();
  82.         return isCorrect;
  83.     }
  84.  
  85.     static String getMatrixFilePath(int matrixSize) throws IOException {
  86.         String ret;
  87.         boolean isIncorrect;
  88.         isIncorrect = true;
  89.         do {
  90.             System.out.println("Введите абсолютный путь к файлу ");
  91.             ret = scanner.nextLine();
  92.             File matrixFile = new File(ret);
  93.             if (!matrixFile.exists()) {
  94.                 System.out.println("Файл не найден");
  95.             } else {
  96.                 if (isFileCorrect(ret, matrixSize)) {
  97.                     isIncorrect = false;
  98.                 } else {
  99.                     System.out.println("Данные в файле некорректны");
  100.                 }
  101.             }
  102.         } while (isIncorrect);
  103.         return ret;
  104.     }
  105.  
  106.     static int[][] getMatrixFromFile(int size) throws IOException {
  107.         int[][] ret = new int[size][size];
  108.         String filePath;
  109.         filePath = getMatrixFilePath(size);
  110.         FileReader matrixFile = new FileReader(filePath);
  111.         Scanner scanner = new Scanner(matrixFile);
  112.         for (int i = 0; i < size; i++) {
  113.             for (int j = 0; j < size; j++) {
  114.                 ret[i][j] = scanner.nextInt();
  115.             }
  116.             scanner.nextLine();
  117.         }
  118.         scanner.close();
  119.         return ret;
  120.     }
  121.  
  122.     static int getMatrixSize() {
  123.         int ret = 0;
  124.         boolean isIncorrect;
  125.         String inputLine;
  126.         do {
  127.             System.out.println("Введите размер матрицы ");
  128.             isIncorrect = false;
  129.             inputLine = scanner.nextLine();
  130.             try {
  131.                 ret = Integer.parseInt(inputLine);
  132.             } catch (Exception ex) {
  133.                 System.out.println("Размер матрицы должен быть числом");
  134.                 isIncorrect = true;
  135.             }
  136.             if ((((ret < 2) || (ret > 10000)) || (ret % 2 == 1)) && !isIncorrect) {
  137.                 System.out.println("Размер матрицы должен быть кратен двум и принадлежать промежутку от 2 до 10000");
  138.                 isIncorrect = true;
  139.             }
  140.         } while (isIncorrect);
  141.         return ret;
  142.     }
  143.  
  144.     static int[][] getMatrix() throws IOException {
  145.         int size = 0;
  146.         String inputType;
  147.         size = getMatrixSize();
  148.         int[][] retMatrix = new int[size][size];
  149.         inputType = getInputType();
  150.         if (inputType == "Console") {
  151.             retMatrix = getMatrixFromConsole(size);
  152.         } else if (inputType == "File") {
  153.             retMatrix = getMatrixFromFile(size);
  154.         }
  155.         return retMatrix;
  156.     }
  157.  
  158.     static String getOutputDirectory() {
  159.         String ret;
  160.         boolean isIncorrect;
  161.         isIncorrect = true;
  162.         do {
  163.             System.out.println("Введите директорию, в которую хотите сохранить матрицу");
  164.             ret = scanner.nextLine();
  165.             File outputDirectory = new File(ret);
  166.             if (outputDirectory.isDirectory() && outputDirectory.exists()) {
  167.                 isIncorrect = false;
  168.             } else {
  169.                 System.out.println("Такой директории не существует.Попробуйте ещё раз");
  170.             }
  171.  
  172.         } while (isIncorrect);
  173.         return ret;
  174.     }
  175.  
  176.     static void printMatrix(int[][] matrixToPrint) {
  177.         for (int i = 0; i < matrixToPrint.length; i++) {
  178.             for (int j = 0; j < matrixToPrint.length; j++) {
  179.                 System.out.printf("%6d", matrixToPrint[i][j]);
  180.             }
  181.             System.out.println();
  182.         }
  183.         System.out.println();
  184.  
  185.     }
  186.  
  187.     static void printMatrixToFile(int[][] matrixToPrint) throws IOException {
  188.         String path;
  189.         path = getOutputDirectory();
  190.         FileWriter myWriter = new FileWriter(path + "\\output.txt");
  191.         for (int i = 0; i < matrixToPrint.length; i++) {
  192.             for (int j = 0; j < matrixToPrint.length; j++) {
  193.                 myWriter.write(String.format("%6d", matrixToPrint[i][j]));
  194.             }
  195.             myWriter.write("\n");
  196.         }
  197.         myWriter.close();
  198.         System.out.println("Матрица сохранена по указанному пути");
  199.     }
  200.  
  201.     static int[][] getMatrixPart(int[][] matrix, int startI, int startJ, int size) {
  202.         int[][] ret = new int[size][size];
  203.         for (int i = 0; i < size; i++)
  204.             for (int j = 0; j < size; j++)
  205.                 ret[i][j] = matrix[i + startI][j + startJ];
  206.         return ret;
  207.     }
  208.  
  209.     static int[][] insertMatrix(int[][] mainMatrix, int[][] toInsert, int startI, int startJ) {
  210.         for (int i = 0; i < toInsert.length; i++) {
  211.             for (int j = 0; j < toInsert.length; j++) {
  212.                 mainMatrix[startI + i][startJ + j] = toInsert[i][j];
  213.             }
  214.         }
  215.         return mainMatrix;
  216.     }
  217.  
  218.     static void swap(int[][] toSwap) {
  219.         int[][] matrix1;
  220.         int[][] matrix2;
  221.         int[][] matrix3;
  222.         int[][] matrix4;
  223.         int halfSize;
  224.         halfSize = toSwap.length / 2;
  225.         matrix1 = getMatrixPart(toSwap, 0, 0, halfSize);
  226.         matrix2 = getMatrixPart(toSwap, 0, halfSize, halfSize);
  227.         matrix3 = getMatrixPart(toSwap, halfSize, 0, halfSize);
  228.         matrix4 = getMatrixPart(toSwap, halfSize, halfSize, halfSize);
  229.         insertMatrix(toSwap, matrix1, halfSize, halfSize);
  230.         insertMatrix(toSwap, matrix2, halfSize, 0);
  231.         insertMatrix(toSwap, matrix3, 0, 0);
  232.         insertMatrix(toSwap, matrix4, 0, halfSize);
  233.     }
  234.  
  235.     public static void main(String[] args) throws IOException {
  236.         scanner = new Scanner(System.in);
  237.         int[][] matrix = getMatrix();
  238.         printMatrix(matrix);
  239.         swap(matrix);
  240.         printMatrix(matrix);
  241.         printMatrixToFile(matrix);
  242.     }
  243.  
  244. }
  245.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement