Advertisement
anticlown

Laba.7.1(Java)

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