Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.LinkedHashSet;
- import java.util.Scanner;
- import java.util.HashSet;
- public class Main {
- private static final Scanner scanner = new Scanner(System.in);
- public static void main(String[] args) {
- HashSet<Character>[] sets, resultSets;
- outputTask();
- sets = choiceOfInput();
- resultSets = calculateSet(sets);
- outputAnswer(resultSets);
- }
- public static void outputTask() {
- System.out.println("Данная программа формирует множество Y={X1 * X2* X3} и выделяет из него подмножество Y1, которое представляет все цифры,входящие в Y. Например, дано X1={‘s’, ‘v’, ‘e’, ‘t’, ‘a’,’ ‘2’}; X2={‘*’, ’-‘, ‘*’, ‘-‘}; X3={‘1’, ‘4’, ‘7’, ‘a’, ‘b’, ‘c’}.");
- }
- public static HashSet<Character>[] choiceOfInput() {
- int choice;
- boolean isNotCorrect;
- HashSet<Character>[] sets;
- choice = -1;
- do {
- isNotCorrect = false;
- System.out.println("Выберите, откуда вводить данные. Введите 0, если с консоли; 1, если с файла");
- try {
- choice = Integer.parseInt(scanner.nextLine());
- } catch (NumberFormatException exception) {
- isNotCorrect = true;
- }
- if (isNotCorrect || ((choice != 0) && (choice != 1))) {
- isNotCorrect = true;
- System.err.println("Неверный ввод данных!");
- }
- } while (isNotCorrect);
- if (choice == 0) {
- sets = inputFromConsole();
- }
- else {
- sets = inputFromFile();
- }
- return sets;
- }
- public static String getExtension(String path) {
- int pos = path.lastIndexOf('.');
- if (pos <= 0) {
- return "";
- }
- return path.substring(pos + 1);
- }
- public static String choicePath() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- System.out.println("Введите путь к файлу: ");
- path = scanner.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанном пути файл не найден.");
- isIncorrect = true;
- } else if (!getExtension(path).equals("txt")) {
- System.err.println("Ошибка, неправильный тип файла!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- public static HashSet<Character>[] inputFromFile() {
- String path;
- String stringOfElements;
- HashSet<Character> charSet;
- HashSet<Character>[] sets;
- sets = new HashSet[3];
- System.out.println("При вводе из файла учтите, что в файле элементы множества должны быть записаны в строку без пробелов.");
- path = choicePath();
- for(int i = 0; i < 3; i++) {
- stringOfElements = inputStringFromFile(path, i);
- charSet = convertToSet(stringOfElements, i);
- sets[i] = charSet;
- }
- return sets;
- }
- public static String inputStringFromFile(String path, int num) {
- boolean isNotCorrect;
- String str;
- str = "";
- isNotCorrect = false;
- System.out.println("Считывание элементов множества" + (num+1) + "...");
- try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
- for(int i = 0; i < num; i++) {
- str = reader.readLine();
- }
- str = reader.readLine();
- } catch (IOException ioException) {
- isNotCorrect = true;
- }
- for (int i = 0; i < str.length(); i++) {
- if (str.charAt(i) == ' ' && !isNotCorrect) {
- isNotCorrect = true;
- }
- }
- if (str.isEmpty() || isNotCorrect) {
- System.out.println("Ошибка ввода! Множество должно иметь минимум 1 символ и не должно иметь пробелы! Введите элементы множества " + (num+1) + " с клавиатуры.");
- str = inputStringFromConsole(num);
- }
- return str;
- }
- public static String inputStringFromConsole(int num) {
- String str;
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- System.out.println("Введите элементы множества " + (num + 1) + " в строку без пробелов: ");
- str = scanner.nextLine();
- for (int i = 0; i < str.length(); i++) {
- if ((str.charAt(i) == ' ') && !isNotCorrect) {
- isNotCorrect = true;
- }
- }
- if (str.isEmpty() || isNotCorrect) {
- System.out.println("Ошибка ввода! Множество должно иметь хотя бы 1 элемент и не иметь пробелы! Повторите попытку.");
- isNotCorrect = true;
- }
- } while(isNotCorrect);
- return str;
- }
- public static HashSet<Character> convertToSet(String str, int num) {
- HashSet<Character> charSet = new HashSet<>();
- for (char elem : str.toCharArray()) {
- charSet.add(elem);
- }
- outputSet(charSet, num);
- return charSet;
- }
- public static void outputSet(HashSet<Character> charSet, int num) {
- System.out.println("Полученное множество " + (num + 1) + ": ");
- for (char elem : charSet) {
- System.out.print(elem + " ");
- }
- System.out.println();
- }
- public static HashSet<Character>[] inputFromConsole() {
- HashSet<Character> charSet;
- String str;
- HashSet<Character>[] sets;
- sets = new HashSet[3];
- for (int i = 0; i < 3; i++) {
- str = inputStringFromConsole(i);
- charSet = convertToSet(str, i);
- sets[i] = charSet;
- }
- return sets;
- }
- public static HashSet<Character>[] calculateSet(HashSet<Character>[] sets) {
- HashSet<Character> symbolsSet = new HashSet<>();
- HashSet<Character>[] resultSets;
- resultSets = new HashSet[2];
- resultSets[0] = new HashSet<Character>();
- resultSets[1] = new HashSet<Character>();
- for (char c = '0'; c <= '9'; c++) {
- symbolsSet.add(c);
- }
- resultSets[0] = sets[0];
- resultSets[0].retainAll(sets[1]);
- resultSets[0].retainAll(sets[2]);
- resultSets[1] = symbolsSet;
- resultSets[1].retainAll(resultSets[0]);
- return resultSets;
- }
- public static void outputAnswer(HashSet<Character>[] sets) {
- String path;
- boolean isIncorrect;
- System.out.println("Множество Y = X1 * X2 + X3 = ");
- for(char elem : sets[0]) {
- System.out.print(elem + " ");
- }
- if (sets[1].size() == 0) {
- System.out.println("\nЦифры не были встречены в подмножестве Y1! ");
- }
- else {
- System.out.println("\nЦифры в множестве Y1:");
- for (char elem : sets[1]) {
- System.out.print(elem + " ");
- }
- System.out.println();
- }
- path = outputPath();
- do {
- isIncorrect = false;
- try (FileWriter writer = new FileWriter(path, true)) {
- writer.write("Множество Y = X1 * X2 + X3 = ");
- for(char elem : sets[0]) {
- writer.write(elem + " ");
- }
- if (sets[1].size() == 0) {
- writer.write("\nЦифры не были встречены в подмножестве Y1! ");
- }
- else {
- writer.write("\nЦифры в множестве Y1:");
- for (char elem : sets[1]) {
- writer.write(elem + " ");
- }
- }
- } catch (IOException ioException) {
- System.err.println("Ошибка при записи в файл");
- isIncorrect = true;
- }
- } while (isIncorrect);
- System.out.println("Данные записаны в файл.");
- }
- public static String outputPath() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- System.out.println("Введите путь к файлу для вывода: ");
- System.out.println();
- path = scanner.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанном пути файл не найден.");
- isIncorrect = true;
- } else if (!getExtension(path).equals("txt")) {
- System.err.println("Ошибка, неправильный тип файла!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement