Advertisement
dxvmxnd

Untitled

Mar 2nd, 2024
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.63 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.LinkedHashSet;
  3. import java.util.Scanner;
  4. import java.util.HashSet;
  5.  
  6. public class Main {
  7. private static final Scanner scanner = new Scanner(System.in);
  8.  
  9. public static void main(String[] args) {
  10. HashSet<Character>[] sets, resultSets;
  11.  
  12. outputTask();
  13. sets = choiceOfInput();
  14. resultSets = calculateSet(sets);
  15. outputAnswer(resultSets);
  16. }
  17. public static void outputTask() {
  18. System.out.println("Данная программа формирует множество Y={X1 * X2* X3} и выделяет из него подмножество Y1, которое представляет все цифры,входящие в Y. Например, дано X1={‘s’, ‘v’, ‘e’, ‘t’, ‘a’,’ ‘2’}; X2={‘*’, ’-‘, ‘*’, ‘-‘}; X3={‘1’, ‘4’, ‘7’, ‘a’, ‘b’, ‘c’}.");
  19. }
  20. public static HashSet<Character>[] choiceOfInput() {
  21. int choice;
  22. boolean isNotCorrect;
  23. HashSet<Character>[] sets;
  24.  
  25. choice = -1;
  26. do {
  27. isNotCorrect = false;
  28. System.out.println("Выберите, откуда вводить данные. Введите 0, если с консоли; 1, если с файла");
  29. try {
  30. choice = Integer.parseInt(scanner.nextLine());
  31. } catch (NumberFormatException exception) {
  32. isNotCorrect = true;
  33. }
  34. if (isNotCorrect || ((choice != 0) && (choice != 1))) {
  35. isNotCorrect = true;
  36. System.err.println("Неверный ввод данных!");
  37. }
  38. } while (isNotCorrect);
  39.  
  40. if (choice == 0) {
  41. sets = inputFromConsole();
  42. }
  43. else {
  44. sets = inputFromFile();
  45. }
  46.  
  47. return sets;
  48. }
  49. public static String getExtension(String path) {
  50. int pos = path.lastIndexOf('.');
  51. if (pos <= 0) {
  52. return "";
  53. }
  54. return path.substring(pos + 1);
  55. }
  56. public static String choicePath() {
  57. String path;
  58. boolean isIncorrect;
  59.  
  60. do {
  61. isIncorrect = false;
  62. System.out.println("Введите путь к файлу: ");
  63. path = scanner.nextLine();
  64.  
  65. File file = new File(path);
  66. if (!file.exists()) {
  67. System.out.println("По указанном пути файл не найден.");
  68. isIncorrect = true;
  69. } else if (!getExtension(path).equals("txt")) {
  70. System.err.println("Ошибка, неправильный тип файла!");
  71. isIncorrect = true;
  72. }
  73. } while (isIncorrect);
  74. return path;
  75.  
  76. }
  77. public static HashSet<Character>[] inputFromFile() {
  78. String path;
  79. String stringOfElements;
  80. HashSet<Character> charSet;
  81. HashSet<Character>[] sets;
  82. sets = new HashSet[3];
  83.  
  84. System.out.println("При вводе из файла учтите, что в файле элементы множества должны быть записаны в строку без пробелов.");
  85. path = choicePath();
  86. for(int i = 0; i < 3; i++) {
  87. stringOfElements = inputStringFromFile(path, i);
  88. charSet = convertToSet(stringOfElements, i);
  89. sets[i] = charSet;
  90.  
  91. }
  92.  
  93.  
  94. return sets;
  95.  
  96. }
  97. public static String inputStringFromFile(String path, int num) {
  98. boolean isNotCorrect;
  99. String str;
  100.  
  101. str = "";
  102. isNotCorrect = false;
  103.  
  104. System.out.println("Считывание элементов множества" + (num+1) + "...");
  105. try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
  106. for(int i = 0; i < num; i++) {
  107. str = reader.readLine();
  108. }
  109. str = reader.readLine();
  110. } catch (IOException ioException) {
  111. isNotCorrect = true;
  112. }
  113. for (int i = 0; i < str.length(); i++) {
  114. if (str.charAt(i) == ' ' && !isNotCorrect) {
  115. isNotCorrect = true;
  116. }
  117. }
  118. if (str.isEmpty() || isNotCorrect) {
  119. System.out.println("Ошибка ввода! Множество должно иметь минимум 1 символ и не должно иметь пробелы! Введите элементы множества " + (num+1) + " с клавиатуры.");
  120. str = inputStringFromConsole(num);
  121. }
  122. return str;
  123. }
  124. public static String inputStringFromConsole(int num) {
  125. String str;
  126. boolean isNotCorrect;
  127.  
  128. do {
  129. isNotCorrect = false;
  130. System.out.println("Введите элементы множества " + (num + 1) + " в строку без пробелов: ");
  131. str = scanner.nextLine();
  132. for (int i = 0; i < str.length(); i++) {
  133. if ((str.charAt(i) == ' ') && !isNotCorrect) {
  134. isNotCorrect = true;
  135. }
  136. }
  137. if (str.isEmpty() || isNotCorrect) {
  138. System.out.println("Ошибка ввода! Множество должно иметь хотя бы 1 элемент и не иметь пробелы! Повторите попытку.");
  139. isNotCorrect = true;
  140. }
  141. } while(isNotCorrect);
  142.  
  143. return str;
  144.  
  145. }
  146. public static HashSet<Character> convertToSet(String str, int num) {
  147. HashSet<Character> charSet = new HashSet<>();
  148.  
  149. for (char elem : str.toCharArray()) {
  150. charSet.add(elem);
  151. }
  152.  
  153. outputSet(charSet, num);
  154.  
  155. return charSet;
  156. }
  157. public static void outputSet(HashSet<Character> charSet, int num) {
  158. System.out.println("Полученное множество " + (num + 1) + ": ");
  159. for (char elem : charSet) {
  160. System.out.print(elem + " ");
  161. }
  162. System.out.println();
  163. }
  164. public static HashSet<Character>[] inputFromConsole() {
  165. HashSet<Character> charSet;
  166. String str;
  167. HashSet<Character>[] sets;
  168. sets = new HashSet[3];
  169.  
  170. for (int i = 0; i < 3; i++) {
  171. str = inputStringFromConsole(i);
  172. charSet = convertToSet(str, i);
  173. sets[i] = charSet;
  174. }
  175.  
  176.  
  177. return sets;
  178. }
  179. public static HashSet<Character>[] calculateSet(HashSet<Character>[] sets) {
  180. HashSet<Character> symbolsSet = new HashSet<>();
  181. HashSet<Character>[] resultSets;
  182. resultSets = new HashSet[2];
  183. resultSets[0] = new HashSet<Character>();
  184. resultSets[1] = new HashSet<Character>();
  185.  
  186. for (char c = '0'; c <= '9'; c++) {
  187. symbolsSet.add(c);
  188. }
  189.  
  190. resultSets[0] = sets[0];
  191. resultSets[0].retainAll(sets[1]);
  192. resultSets[0].retainAll(sets[2]);
  193.  
  194. resultSets[1] = symbolsSet;
  195. resultSets[1].retainAll(resultSets[0]);
  196.  
  197. return resultSets;
  198. }
  199. public static void outputAnswer(HashSet<Character>[] sets) {
  200. String path;
  201. boolean isIncorrect;
  202.  
  203. System.out.println("Множество Y = X1 * X2 + X3 = ");
  204. for(char elem : sets[0]) {
  205. System.out.print(elem + " ");
  206. }
  207.  
  208. if (sets[1].size() == 0) {
  209. System.out.println("\nЦифры не были встречены в подмножестве Y1! ");
  210. }
  211. else {
  212. System.out.println("\nЦифры в множестве Y1:");
  213. for (char elem : sets[1]) {
  214. System.out.print(elem + " ");
  215. }
  216. System.out.println();
  217. }
  218.  
  219.  
  220. path = outputPath();
  221. do {
  222. isIncorrect = false;
  223. try (FileWriter writer = new FileWriter(path, true)) {
  224. writer.write("Множество Y = X1 * X2 + X3 = ");
  225. for(char elem : sets[0]) {
  226. writer.write(elem + " ");
  227. }
  228.  
  229. if (sets[1].size() == 0) {
  230. writer.write("\nЦифры не были встречены в подмножестве Y1! ");
  231. }
  232. else {
  233. writer.write("\nЦифры в множестве Y1:");
  234. for (char elem : sets[1]) {
  235. writer.write(elem + " ");
  236. }
  237. }
  238. } catch (IOException ioException) {
  239. System.err.println("Ошибка при записи в файл");
  240. isIncorrect = true;
  241. }
  242. } while (isIncorrect);
  243. System.out.println("Данные записаны в файл.");
  244. }
  245. public static String outputPath() {
  246. String path;
  247. boolean isIncorrect;
  248.  
  249. do {
  250. isIncorrect = false;
  251. System.out.println("Введите путь к файлу для вывода: ");
  252. System.out.println();
  253. path = scanner.nextLine();
  254.  
  255. File file = new File(path);
  256. if (!file.exists()) {
  257. System.out.println("По указанном пути файл не найден.");
  258. isIncorrect = true;
  259. } else if (!getExtension(path).equals("txt")) {
  260. System.err.println("Ошибка, неправильный тип файла!");
  261. isIncorrect = true;
  262. }
  263. } while (isIncorrect);
  264. return path;
  265. }
  266.  
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement