Advertisement
deced

Untitled

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