Advertisement
anticlown

Laba.7.1(Java)

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