Advertisement
THOMAS_SHELBY_18

Lab7_1 (JAVA)

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