Advertisement
anticlown

Laba.6.2(Java)

Apr 13th, 2023
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.10 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.     private static final int MIN_SIZE = 4;
  6.     private static final int MAX_SIZE = 32;
  7.     private static final Scanner scan = new Scanner(System.in);
  8.  
  9.     public static void outputTaskInfo() {
  10.         System.out.println("Данная программа находит магический квадрат указанного четно-четного размера." + "\n" +
  11.                 "Диапазон ввода значений размера: " + MIN_SIZE + "..." + MAX_SIZE + "." + "\n" +
  12.                 "Значение должно быть кратно 4!");
  13.     }
  14.  
  15.     public static int getVerificationOfChoice() {
  16.         int choice = 0;
  17.         boolean isIncorrect;
  18.  
  19.         do {
  20.             isIncorrect = false;
  21.             try {
  22.                 choice = Integer.parseInt(scan.nextLine());
  23.             } catch (NumberFormatException e) {
  24.                 System.out.println("Проверьте корректность ввода данных!");
  25.                 isIncorrect = true;
  26.             }
  27.             if (!isIncorrect && (choice != 0 && choice != 1)) {
  28.                 System.out.println("Для выбора введите 0 или 1!");
  29.                 isIncorrect = true;
  30.             }
  31.         } while (isIncorrect);
  32.  
  33.         return choice;
  34.     }
  35.  
  36.     public static String inputPathToFile() {
  37.         boolean isIncorrect;
  38.         String path;
  39.  
  40.         System.out.println("Укажите путь к файлу: ");
  41.  
  42.         do {
  43.             isIncorrect = false;
  44.             path = scan.nextLine();
  45.             File file = new File(path);
  46.  
  47.             if (!file.exists()) {
  48.                 System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
  49.                 isIncorrect = true;
  50.             }
  51.         } while (isIncorrect);
  52.  
  53.         return path;
  54.     }
  55.  
  56.     public static int readSizeFromConsole() {
  57.         int size = 0;
  58.         boolean isIncorrect;
  59.  
  60.         System.out.println("Введите значение размера магического квадрата: ");
  61.  
  62.         do {
  63.             isIncorrect = false;
  64.             try {
  65.                 size = Integer.parseInt(scan.nextLine());
  66.             } catch (NumberFormatException e) {
  67.                 System.out.println("Проверьте корректность ввода данных!");
  68.                 isIncorrect = true;
  69.             }
  70.             if (!isIncorrect && (size < MIN_SIZE || size > MAX_SIZE || (size & (size - 1)) != 0)) {
  71.                 System.out.println("Введите число от " + MIN_SIZE + " до " + MAX_SIZE + " и кратное 4!");
  72.                 isIncorrect = true;
  73.             }
  74.         } while (isIncorrect);
  75.  
  76.         return size;
  77.     }
  78.  
  79.     public static int readSizeFromFile(final String path) {
  80.         int size;
  81.  
  82.         System.out.println("Происходит чтение размера магического квадрата...");
  83.  
  84.         try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  85.             size = Integer.parseInt(br.readLine());
  86.         } catch (Exception e) {
  87.             System.out.println("Ошибка при чтении данных! Введите размер с консоли!");
  88.             size = readSizeFromConsole();
  89.         }
  90.  
  91.         if (size < MIN_SIZE || size > MAX_SIZE || (size & (size - 1)) != 0) {
  92.             System.out.println("Неверное значение в файле! Введите размер с консоли!");
  93.             size = readSizeFromConsole();
  94.         }
  95.  
  96.         return size;
  97.     }
  98.  
  99.     public static void outputSize(final int choice, int size, String path) {
  100.         boolean isIncorrect;
  101.  
  102.         if (choice == 0)
  103.             System.out.println("Размер магического квадрата: " + size + ".");
  104.  
  105.         if (choice == 1) {
  106.             System.out.println("Вывод размера в файл...");
  107.  
  108.             do {
  109.                 isIncorrect = false;
  110.                 try {
  111.                     FileWriter writer = new FileWriter(path);
  112.                     writer.write(size + "\n");
  113.                     writer.close();
  114.                 } catch (IOException e) {
  115.                     isIncorrect = true;
  116.                     System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  117.                     path = inputPathToFile();
  118.                 }
  119.             } while (isIncorrect);
  120.  
  121.             System.out.println("Данные успешно записаны в файл!");
  122.         }
  123.     }
  124.  
  125.     public static int[][] findMagicSquare(final int size) {
  126.         int[][] magicSquare = new int[size][size];
  127.         int i,j;
  128.  
  129.         for (i = 0; i < size; i++)
  130.         {
  131.             for (j = 0; j < size; j++)
  132.             {
  133.                 magicSquare[i][j] = (size * i) + j + 1;
  134.             }
  135.         }
  136.         for (i = 0; i < size / 4; i++)
  137.         {
  138.             for (j = 0; j < size / 4; j++)
  139.             {
  140.                 magicSquare[i][j] = (size * size + 1) - magicSquare[i][j];
  141.             }
  142.         }
  143.         for (i = 0; i < size / 4; i++)
  144.         {
  145.             for (j = 3 * (size / 4); j < size; j++)
  146.             {
  147.                 magicSquare[i][j] = (size * size + 1) - magicSquare[i][j];
  148.             }
  149.         }
  150.         for (i = 3 * size / 4; i < size; i++)
  151.         {
  152.             for (j = 0; j < size / 4; j++)
  153.             {
  154.                 magicSquare[i][j] = (size * size + 1) - magicSquare[i][j];
  155.             }
  156.         }
  157.         for (i = 3 * size / 4; i < size; i++)
  158.         {
  159.             for (j = 3 * size / 4; j < size; j++)
  160.             {
  161.                 magicSquare[i][j] = (size * size + 1) - magicSquare[i][j];
  162.             }
  163.         }
  164.         for (i = size / 4; i < 3 * size / 4; i++)
  165.         {
  166.             for (j = size / 4; j < 3 * size / 4; j++)
  167.             {
  168.                 magicSquare[i][j] = (size * size + 1) - magicSquare[i][j];
  169.             }
  170.         }
  171.  
  172.         return magicSquare;
  173.     }
  174.  
  175.     public static void outputTriangleMatrix(final int choice, String path, final int[][] matrix, final int size) {
  176.         boolean isIncorrect;
  177.  
  178.         if (choice == 0) {
  179.             System.out.println("Вывод магического квадрата: ");
  180.  
  181.             for (int i = 0; i < size; i++)
  182.             {
  183.                 for (int j = 0; j < size; j++)
  184.                     System.out.print(matrix[i][j] + " ");
  185.                 System.out.print ("\n");
  186.             }
  187.         }
  188.  
  189.         if (choice == 1) {
  190.             System.out.println("Вывод магического квадрата в файл...");
  191.  
  192.             do {
  193.                 isIncorrect = false;
  194.                 try {
  195.                     FileWriter writer = new FileWriter(path, true);
  196.                     BufferedWriter bufferWriter = new BufferedWriter(writer);
  197.  
  198.                     for (int i = 0; i < size; i++)
  199.                     {
  200.                         for (int j = 0; j < size; j++)
  201.                             bufferWriter.write(matrix[i][j] + " ");
  202.                         bufferWriter.write("\n");
  203.                     }
  204.                     bufferWriter.close();
  205.                     writer.close();
  206.                 } catch (IOException e) {
  207.                     isIncorrect = true;
  208.                     System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  209.                     path = inputPathToFile();
  210.                 }
  211.             } while (isIncorrect);
  212.  
  213.             System.out.println("Данные успешно записаны в файл!");
  214.         }
  215.     }
  216.  
  217.     public static int processUserInput() {
  218.         int size = 0;
  219.         int choiceForInput;
  220.         String pathToIn;
  221.  
  222.         System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
  223.         choiceForInput = getVerificationOfChoice();
  224.  
  225.         if (choiceForInput == 0) {
  226.             size = readSizeFromConsole();
  227.         }
  228.         if (choiceForInput == 1) {
  229.             pathToIn = inputPathToFile();
  230.             size = readSizeFromFile(pathToIn);
  231.         }
  232.  
  233.         return size;
  234.     }
  235.  
  236.     public static void processUserOutput(int size, int[][] triangleMatrix) {
  237.         int choiceForOutput;
  238.         String pathToOut = "";
  239.  
  240.         System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
  241.         choiceForOutput = getVerificationOfChoice();
  242.  
  243.         if (choiceForOutput == 1)
  244.             pathToOut = inputPathToFile();
  245.         outputSize(choiceForOutput, size, pathToOut);
  246.         outputTriangleMatrix(choiceForOutput, pathToOut, triangleMatrix, size);
  247.     }
  248.  
  249.     public static void main (String[] args) {
  250.         outputTaskInfo();
  251.         int size = processUserInput();
  252.         int[][] magicSquare = findMagicSquare(size);
  253.         processUserOutput(size, magicSquare);
  254.  
  255.         scan.close();
  256.     }
  257. }
  258.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement