Advertisement
deced

Untitled

May 2nd, 2021
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.03 KB | None | 0 0
  1. package Blok_7_1;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.NoSuchElementException;
  5. import java.util.Scanner;
  6. import java.io.*;
  7.  
  8. public class Blok_7_1 {
  9.  
  10. static Scanner scConsole;
  11.  
  12. static final String YES = "1";
  13. static final String NO = "2";
  14.  
  15. static String inputPathToFile() {
  16. boolean isIncorrect;
  17. String path;
  18. do {
  19. isIncorrect = false;
  20. path = scConsole.nextLine();
  21. File file = new File(path);
  22. if (!file.exists()) {
  23. System.err.print("Файл не найден! Введите правильную ссылку: ");
  24. isIncorrect = true;
  25. }
  26.  
  27. } while (isIncorrect);
  28. return path;
  29. }
  30.  
  31. static boolean isCorrect(ArrayList<ArrayList<Integer>> m) {
  32. boolean isCorrect = true;
  33. for (int j = 0; j < m.size() && isCorrect; j++) {
  34. isCorrect = m.get(j).size() == m.get(0).size();
  35. }
  36. if (isCorrect) {
  37. int count = 0;
  38. for (int i = 0; i < m.get(0).size() && isCorrect; i++) {
  39. for (int j = 0; j < m.size(); j++) {
  40. count += m.get(j).get(i);
  41. }
  42. isCorrect = count == 2;
  43. count = 0;
  44. }
  45. }
  46.  
  47. return isCorrect;
  48. }
  49.  
  50. static void readMatrixFromFile(ArrayList<ArrayList<Integer>> matrix) throws FileNotFoundException, IOException {
  51. System.out.print("\nВведите ссылку на файл с матрицей: ");
  52. String path = inputPathToFile();
  53. boolean toExit;
  54. boolean wrongFormat = false;
  55. String lineStr = "";
  56. BufferedReader scFile = new BufferedReader(new FileReader(new File(path)));
  57. do {
  58. toExit = false;
  59. lineStr = scFile.readLine();
  60. ArrayList<Integer> line = new ArrayList<>();
  61. if (lineStr != null) {
  62. lineStr = lineStr.trim();
  63. if (lineStr.matches("^((1|0) )+(1|0)$")) {
  64. for (String str : lineStr.split(" ")) {
  65. line.add(Integer.parseInt(str));
  66. }
  67. matrix.add(line);
  68. } else {
  69. toExit = true;
  70. scFile.close();
  71. wrongFormat = true;
  72. }
  73. } else {
  74. toExit = true;
  75. scFile.close();
  76. }
  77. if (toExit) {
  78. if (wrongFormat || !isCorrect(matrix)) {
  79. System.err.print("Данные в файле некорректы. Введите ссылку на другой файл: ");
  80. path = inputPathToFile();
  81. scFile = new BufferedReader(new FileReader(new File(path)));
  82. toExit = false;
  83. wrongFormat = false;
  84. matrix.clear();
  85. }
  86. }
  87. } while (!toExit);
  88. }
  89.  
  90. static String matrixToString(ArrayList<ArrayList<Integer>> matrix) {
  91. String str = "";
  92. for (ArrayList<Integer> line : matrix) {
  93. for (int i : line) {
  94. str += i + " ";
  95. }
  96. str += "\n";
  97. }
  98. return str;
  99. }
  100.  
  101. static String listToString(ArrayList<ArrayList<Integer>> lists) {
  102. String str = "";
  103. int counter = 0;
  104. for (ArrayList<Integer> list : lists) {
  105. str += "\t" + (lists.indexOf(list) + 1) + ": ";
  106. counter = 0;
  107. for (int i : list) {
  108. if (counter != list.size() - 1) {
  109. str += i + "-> ";
  110. counter++;
  111. } else {
  112. str += i;
  113. }
  114. }
  115. str += "\n";
  116. }
  117. return str;
  118. }
  119.  
  120. static void getIncidenceLists(ArrayList<ArrayList<Integer>> matrix, ArrayList<ArrayList<Integer>> lists) {
  121. for (int i = 0; i < matrix.size(); i++) {
  122. ArrayList<Integer> incidenceList = new ArrayList<>();
  123. lists.add(incidenceList);
  124. }
  125. int firstNode = 0;
  126. int secondNode = 0;
  127. for (int i = 0; i < matrix.get(0).size(); i++) {
  128. firstNode = 0;
  129. secondNode = 0;
  130. for (int j = 0; j < matrix.size(); j++) {
  131. if (firstNode == 0 && matrix.get(j).get(i) == 1) {
  132. firstNode = j + 1;
  133. } else if (secondNode == 0 && matrix.get(j).get(i) == 1) {
  134. secondNode = j + 1;
  135. }
  136. }
  137. if (secondNode != 0) {
  138. lists.get(firstNode - 1).add(secondNode);
  139. lists.get(secondNode - 1).add(firstNode);
  140. }
  141. }
  142. for (ArrayList<Integer> list : lists) {
  143. list.sort(Integer::compareTo);
  144. }
  145. }
  146.  
  147. static String getUserAnswer() {
  148. String answer = "";
  149. boolean isIncorrect;
  150. do {
  151. isIncorrect = false;
  152. answer = scConsole.nextLine();
  153. if (!(answer.equals(YES) || answer.equals(NO))) {
  154. isIncorrect = true;
  155. System.err.print("Некорректный ввод! Повторите попытку: ");
  156. }
  157. } while (isIncorrect);
  158. return answer;
  159. }
  160.  
  161. static String userAnswer() {
  162. return getUserAnswer();
  163. }
  164.  
  165. static void saveInFile(ArrayList<ArrayList<Integer>> matrix, ArrayList<ArrayList<Integer>> lists, String path) throws IOException {
  166. boolean isIncorrect;
  167. PrintWriter writer;
  168. do {
  169. isIncorrect = false;
  170. try {
  171. writer = new PrintWriter(path);
  172. writer.write("Исходная матрица инцидентности:\n");
  173. writer.write(matrixToString(matrix));
  174. writer.write("\nСписки инцидентности:\n");
  175. writer.write(listToString(lists));
  176. writer.close();
  177. } catch (Exception e) {
  178. System.err.print("Доступ к файлу закрыт! Ведите ссылк уна другой файл: ");
  179. isIncorrect = true;
  180. path = inputPathToFile();
  181. }
  182. } while (isIncorrect);
  183. }
  184.  
  185. static void saveResult(ArrayList<ArrayList<Integer>> matrix, ArrayList<ArrayList<Integer>> lists) throws IOException {
  186. System.out.println("\nЖелаете сохранить результат в файл: \n1. Да; \n2. Нет (программа будет закрыта);");
  187. System.out.print("Сделайте выбор: ");
  188. switch (userAnswer()) {
  189. case YES:
  190. System.out.print("Введите ссылку на файл для вывода: ");
  191. String path = inputPathToFile();
  192. saveInFile(matrix, lists, path);
  193. System.out.println("Данные упешно сохранены!");
  194. break;
  195.  
  196. case NO:
  197. return;
  198. }
  199. }
  200.  
  201. public static void main(String[] args) throws FileNotFoundException, IOException {
  202. scConsole = new Scanner(System.in);
  203. System.out.println("Программа преобразует матрицу инцидентности в списки инцидентности.");
  204. ArrayList<ArrayList<Integer>> incidenceMatrix = new ArrayList<>();
  205. ArrayList<ArrayList<Integer>> incidenceList = new ArrayList<>();
  206. readMatrixFromFile(incidenceMatrix);
  207. System.out.println("\nИсходная матрица инцидентности: ");
  208. System.out.println(matrixToString(incidenceMatrix));
  209. getIncidenceLists(incidenceMatrix, incidenceList);
  210. System.out.println("\nСписки инцидентности: ");
  211. System.out.println(listToString(incidenceList));
  212. saveResult(incidenceMatrix, incidenceList);
  213. scConsole.close();
  214. }
  215. }
  216.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement