Advertisement
anticlown

laba.2.4.(Java)

Oct 27th, 2022 (edited)
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.69 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. final class inpData {
  5.   public int size;
  6.   public int[][] matrix;
  7.  
  8.   public inpData(int size, int[][] matrix) {
  9.     this.size = size;
  10.     this.matrix = matrix;
  11.   }
  12. }
  13.  
  14. public class Main {
  15.   private static final int MIN_SIZE = 2;
  16.   private static final int MAX_SIZE = 10;
  17.   private static final int MIN_VALUE = -1000;
  18.   private static final int MAX_VALUE = 1000;
  19.   private static final Scanner scan = new Scanner(System.in);
  20.  
  21.   public static void outputTaskInfo() {
  22.     System.out.println("Данная программа \"переворачивает\" действительную квадратную матрицу порядка 2*n, где 2*n задано." + "\n" +
  23.                        "Диапазон ввода значений размера матрицы(2 * n) : " + MIN_SIZE + "..." + MAX_SIZE + ". \n" +
  24.                        "Диапазон ввода значений элементов подматриц: " + MIN_VALUE + "..." +  MAX_VALUE + ".");
  25.   }
  26.  
  27.   public static int getVerificationOfChoice() {
  28.     int choice = 0;
  29.     boolean isIncorrect;
  30.  
  31.     do {
  32.       isIncorrect = false;
  33.       try {
  34.         choice = Integer.parseInt(scan.nextLine());
  35.       } catch (NumberFormatException e) {
  36.         System.out.println("Проверьте корректность ввода данных!");
  37.         isIncorrect = true;
  38.       }
  39.       if (!isIncorrect && (choice != 0 && choice != 1)) {
  40.         System.out.println("Для выбора введите 0 или 1!");
  41.         isIncorrect = true;
  42.       }
  43.     } while (isIncorrect);
  44.  
  45.     return choice;
  46.   }
  47.  
  48.   public static String inputPathToFile() {
  49.     boolean isIncorrect;
  50.     String path;
  51.  
  52.     System.out.println("Укажите путь к файлу: ");
  53.  
  54.     do {
  55.       isIncorrect = false;
  56.       path = scan.nextLine();
  57.       File file = new File(path);
  58.  
  59.       if (!file.exists()) {
  60.         System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
  61.         isIncorrect = true;
  62.       }
  63.     } while (isIncorrect);
  64.  
  65.     return path;
  66.   }
  67.  
  68.   public static int readSizeFromConsole(){
  69.     int size = 0;
  70.     boolean isIncorrect;
  71.  
  72.     System.out.println("Введите значение размера матрицы: ");
  73.  
  74.     do {
  75.       isIncorrect = false;
  76.       try {
  77.         size = Integer.parseInt(scan.nextLine());
  78.       } catch (NumberFormatException e) {
  79.         System.out.println("Проверьте корректность ввода данных!");
  80.         isIncorrect = true;
  81.       }
  82.       if (!isIncorrect && (size < MIN_SIZE || size > MAX_SIZE)) {
  83.         System.out.println("Введите число от " + MIN_SIZE + " до " + MAX_SIZE + "! \n");
  84.         isIncorrect = true;
  85.       }
  86.     } while (isIncorrect);
  87.  
  88.     return size;
  89.   }
  90.  
  91.   public static int readSizeFromFile(final String path) {
  92.     int size;
  93.     boolean isIncorrect = true;
  94.  
  95.     System.out.println("Происходит чтение размеров матрицы...");
  96.  
  97.     try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  98.       size = Integer.parseInt(br.readLine());
  99.     } catch (Exception e) {
  100.       isIncorrect = false;
  101.       System.out.println("Ошибка при считывании размера из файла!Введите размер с консоли!");
  102.       size = readSizeFromConsole();
  103.     }
  104.  
  105.     return size;
  106.   }
  107.  
  108.   public static void outputSize(final int choice, int size, String path) {
  109.     boolean isIncorrect;
  110.  
  111.     if (choice == 0)
  112.       System.out.println("Размер матрицы равен " + size + ".");
  113.     if (choice == 1) {
  114.       System.out.println("Вывод значения раземера в файл...");
  115.  
  116.       do {
  117.         isIncorrect = false;
  118.         try {
  119.           FileWriter writer = new FileWriter(path);
  120.           writer.write(size + "\n");
  121.           writer.close();
  122.         } catch (IOException e) {
  123.           isIncorrect = true;
  124.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  125.           path = inputPathToFile();
  126.         }
  127.       } while (isIncorrect);
  128.  
  129.       System.out.println("Данные успешно записаны в файл!");
  130.     }
  131.   }
  132.  
  133.   public static int[][] fillMatrixFromConsole(final int size) {
  134.     int[][] matrix = new int[size][size];
  135.     boolean isIncorrect;
  136.  
  137.     for (int i = 0; i < size; i++) {
  138.       for (int j = 0; j < size; j++) {
  139.         System.out.println("Введите значение элемента " + (i + 1) + "-ой строки " + (j + 1) + "-го столбца матрицы: ");
  140.  
  141.         do {
  142.           isIncorrect = false;
  143.           try {
  144.             matrix[i][j] = Integer.parseInt(scan.nextLine());
  145.           } catch (NumberFormatException e) {
  146.             System.out.println("Проверьте корректность ввода данных!");
  147.             isIncorrect = true;
  148.           }
  149.  
  150.           if (!isIncorrect && (matrix[i][j] < MIN_VALUE || matrix[i][j] > MAX_VALUE)) {
  151.             isIncorrect = true;
  152.             System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "!");
  153.           }
  154.         } while (isIncorrect);
  155.       }
  156.     }
  157.  
  158.     return matrix;
  159.   }
  160.  
  161.   public static int[][] fillMatrixFromFile (final int size, final String path) throws FileNotFoundException {
  162.     int[][] matrix = new int[size][size];
  163.     int count = 0 ;
  164.     Scanner fr = new Scanner(new File(path));
  165.  
  166.     System.out.println("Чтение матрицы...");
  167.     fr.nextLine();
  168.     while (fr.hasNext()) {
  169.       fr.next();
  170.       count++;
  171.     }
  172.  
  173.     fr.close();
  174.  
  175.     if (count > size * size) {
  176.       System.out.println("Ошибка при чтении матрицы! Введите матрицу с консоли!");
  177.       matrix = fillMatrixFromConsole(size);
  178.     } else {
  179.       fr = new Scanner(new File(path));
  180.       fr.nextLine();
  181.  
  182.       for (int i = 0; i < size; i++) {
  183.         for (int j = 0; j < size; j++) {
  184.           try {
  185.             matrix[i][j] = fr.nextInt();
  186.           } catch (Exception e) {
  187.             System.out.println("Ошибка при считывании матрицы из файла!Введите матрицу с консоли!");
  188.             matrix = fillMatrixFromConsole(size);
  189.           }
  190.           if (matrix[i][j] < MIN_VALUE || matrix[i][j] > MAX_VALUE) {
  191.             System.out.println("Ошибка при считывании матрицы из файла!Введите матрицу с консоли!");
  192.             matrix = fillMatrixFromConsole(size);
  193.           }
  194.         }
  195.       }
  196.     }
  197.  
  198.     return matrix;
  199.   }
  200.  
  201.   public static void outputMatrix(final int choice, String path, final int[][] matrix, final int size) {
  202.     boolean isIncorrect;
  203.  
  204.     if (choice == 0) {
  205.       System.out.println("Вывод начальной матрицы: ");
  206.       for (int i = 0; i < size; i++)
  207.       {
  208.         for (int j = 0; j < size; j++)
  209.           System.out.print(matrix[i][j] + "\t");
  210.         System.out.print("\n");
  211.       }
  212.       System.out.print("\n");
  213.     }
  214.  
  215.     if (choice == 1) {
  216.       System.out.println("Вывод начальной матрицы в файл...");
  217.  
  218.       do {
  219.         isIncorrect = false;
  220.         try {
  221.           FileWriter writer = new FileWriter(path, true);
  222.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  223.  
  224.           for (int i = 0; i < size; i++)
  225.           {
  226.             for (int j = 0; j < size; j++)
  227.               bufferWriter.write(matrix[i][j] + "\t");
  228.             bufferWriter.write("\n");
  229.           }
  230.           bufferWriter.write("\n");
  231.  
  232.           bufferWriter.close();
  233.           writer.close();
  234.         } catch (IOException e) {
  235.           isIncorrect = true;
  236.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  237.           path = inputPathToFile();
  238.         }
  239.       } while (isIncorrect);
  240.  
  241.       System.out.println("Данные успешно записаны в файл!");
  242.     }
  243.   }
  244.  
  245.   public static int[][] createNewMatrix(final int size, final int[][] matrix) {
  246.     int[][] newMatrix = new int[size][size];
  247.     int submatrixSize = size / 2;
  248.     int[][] submatrix1 = new int[submatrixSize][submatrixSize];
  249.     int[][] submatrix2 = new int[submatrixSize][submatrixSize];
  250.     int[][] submatrix3 = new int[submatrixSize][submatrixSize];
  251.     int[][] submatrix4 = new int[submatrixSize][submatrixSize];
  252.  
  253.     //создание подматриц
  254.     for (int i = 0; i < submatrixSize; i++)
  255.       System.arraycopy(matrix[i], 0, submatrix1[i], 0, submatrixSize);
  256.  
  257.     for (int i = 0; i < submatrixSize; i++)
  258.       System.arraycopy(matrix[i], submatrixSize, submatrix2[i], 0, submatrixSize);
  259.  
  260.     for (int i = 0; i < submatrixSize; i++)
  261.       System.arraycopy(matrix[i + submatrixSize], 0, submatrix3[i], 0, submatrixSize);
  262.  
  263.     for (int i = 0; i < submatrixSize; i++)
  264.       System.arraycopy(matrix[i + submatrixSize], submatrixSize, submatrix4[i], 0, submatrixSize);
  265.  
  266.     //создание новой матрицы
  267.     for (int i = 0; i < submatrixSize; i++)
  268.       System.arraycopy(submatrix1[i], 0, newMatrix[i + submatrixSize], 0, submatrixSize);
  269.  
  270.     for (int i = 0; i < submatrixSize; i++)
  271.       System.arraycopy(submatrix2[i], 0, newMatrix[i + submatrixSize], submatrixSize, submatrixSize);
  272.  
  273.     for (int i = 0; i < submatrixSize; i++)
  274.       System.arraycopy(submatrix3[i], 0, newMatrix[i], submatrixSize, submatrixSize);
  275.  
  276.     for (int i = 0; i < submatrixSize; i++)
  277.       System.arraycopy(submatrix4[i], 0, newMatrix[i], 0, submatrixSize);
  278.  
  279.     return newMatrix;
  280.   }
  281.  
  282.   public static void outputNewMatrix(final int choice, String path, final int[][] matrix, final int size) {
  283.     boolean isIncorrect;
  284.  
  285.     if (choice == 0) {
  286.       System.out.println("Вывод новой матрицы: ");
  287.       for (int i = 0; i < size; i++)
  288.       {
  289.         for (int j = 0; j < size; j++)
  290.           System.out.print(matrix[i][j] + "\t");
  291.         System.out.print("\n");
  292.       }
  293.       System.out.print("\n");
  294.     }
  295.  
  296.     if (choice == 1) {
  297.       System.out.println("Вывод новой матрицы в файл...");
  298.  
  299.       do {
  300.         isIncorrect = false;
  301.         try {
  302.           FileWriter writer = new FileWriter(path, true);
  303.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  304.  
  305.           for (int i = 0; i < size; i++)
  306.           {
  307.             for (int j = 0; j < size; j++)
  308.               bufferWriter.write(matrix[i][j] + "\t");
  309.             bufferWriter.write("\n");
  310.           }
  311.           bufferWriter.write("\n");
  312.  
  313.           bufferWriter.close();
  314.           writer.close();
  315.         } catch (IOException e) {
  316.           isIncorrect = true;
  317.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  318.           path = inputPathToFile();
  319.         }
  320.       } while (isIncorrect);
  321.  
  322.       System.out.println("Данные успешно записаны в файл!");
  323.     }
  324.   }
  325.  
  326.   public static inpData processUserInput() throws FileNotFoundException {
  327.     int size = 0;
  328.     int choiceForInput;
  329.     int[][] matrix = new int[0][];
  330.     String pathToIn = "";
  331.  
  332.     System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
  333.     choiceForInput = getVerificationOfChoice();
  334.  
  335.     if (choiceForInput == 0) {
  336.       size = readSizeFromConsole();
  337.       matrix = fillMatrixFromConsole(size);
  338.     }
  339.     if (choiceForInput == 1) {
  340.       pathToIn = inputPathToFile();
  341.       size = readSizeFromFile(pathToIn);
  342.       matrix = fillMatrixFromFile(size, pathToIn);
  343.     }
  344.     return new inpData(size, matrix);
  345.   }
  346.  
  347.   public static void processUserOutput(int size, int[][] matrix, int[][] newMatrix) {
  348.     int choiceForOutput;
  349.     String pathToOut = "";
  350.  
  351.     System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
  352.     choiceForOutput = getVerificationOfChoice();
  353.  
  354.     if (choiceForOutput == 1)
  355.       pathToOut = inputPathToFile();
  356.       outputSize(choiceForOutput, size, pathToOut);
  357.       outputMatrix(choiceForOutput, pathToOut, matrix, size);
  358.       outputNewMatrix(choiceForOutput, pathToOut, newMatrix, size);
  359.   }
  360.  
  361.   public static void main (String[] args) throws FileNotFoundException {
  362.     outputTaskInfo();
  363.     inpData data = processUserInput();
  364.     int[][] newMatrix = createNewMatrix(data.size, data.matrix);
  365.     processUserOutput(data.size, data.matrix, newMatrix);
  366.  
  367.     scan.close();
  368.   }
  369. }
  370.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement