Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.lab4;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.Scanner;
- import java.io.FileWriter;
- public class Lab4 {
- final static int INPUT = 1, OUTPUT = 2;
- public static void main(String args[]) {
- int twoSubsequences[][], combination[], choice;
- Scanner scan = new Scanner(System.in);
- System.out.println("Программа строит объединение двух последовательностей целых чисел, в которых нет повторяющихся элементов.");
- choice = chooseWay(INPUT, scan);
- twoSubsequences = inputSubsequences(choice, scan);
- combination = makeCombination(twoSubsequences[0], twoSubsequences[1]);
- choice = chooseWay(OUTPUT, scan);
- outputSubsequences(combination, choice, scan);
- scan.close();
- }
- public static void outputSubsequences(int[] combination, int choice, Scanner scan) {
- switch (choice) {
- case 1: {
- String fileName;
- boolean isNotCorrect;
- FileWriter writer = null;
- do {
- isNotCorrect = false;
- fileName = inputFileName(scan, OUTPUT);
- try {
- writer = new FileWriter(fileName);
- } catch (IOException err) {
- isNotCorrect = true;
- System.out.println("Невозможно открыть файл для записи! Повторите ввод имени файла.");
- }
- if (!isNotCorrect) {
- isNotCorrect = outputInFile(combination, writer);
- if (!isNotCorrect ) {
- try {
- writer.close();
- } catch (IOException err) {
- isNotCorrect = true;
- System.out.println("Ошибка при закрытии файла! Повторите ввод имени файла.");
- }
- }
- }
- } while (isNotCorrect);
- System.out.print("Искомые данные выведены в файл ");
- System.out.println(fileName);
- break;
- }
- default:
- System.out.println("Искомая последовательность:");
- showSubsequence(combination);
- }
- }
- public static boolean outputInFile(int[] combination, FileWriter writer) {
- for (int i = 0; i < combination.length; i++) {
- try {
- writer.write(Integer.toString(combination[i]));
- writer.write(' ');
- } catch (IOException err) {
- System.out.println("Невозможно записать данные в файл! Повторите ввод имени файла!");
- return true;
- }
- }
- return false;
- }
- public static int[] makeCombination(int[] subsequence1, int[] subsequence2) {
- int combination[], k, counter;
- boolean isInclusion;
- counter = subsequence1.length;
- for (int i = 0; i < subsequence2.length; i++) {
- isInclusion = false;
- k = 0;
- while (!isInclusion && k < subsequence1.length) {
- if (subsequence1[k] == subsequence2[i])
- isInclusion = true;
- k++;
- }
- if (!isInclusion)
- counter++;
- }
- combination = new int[counter];
- counter = subsequence1.length;
- for (int i = 0; i < subsequence1.length; i++)
- combination[i] = subsequence1[i];
- for (int i = 0; i < subsequence2.length; i++) {
- isInclusion = false;
- k = 0;
- while (!isInclusion && k < subsequence1.length) {
- if (subsequence1[k] == subsequence2[i])
- isInclusion = true;
- k++;
- }
- if (!isInclusion) {
- combination[counter] = subsequence2[i];
- counter++;
- }
- }
- return combination;
- }
- public static int chooseWay(final int InOrOutput, Scanner scan) {
- int choice;
- boolean isNotCorrect;
- choice = 0;
- switch (InOrOutput) {
- case INPUT:
- System.out.println("Выберите вариант ввода:");
- System.out.println("1.Данные вводятся из текстового файла.");
- System.out.println("2.Данные вводятся через консоль.");
- break;
- default:
- System.out.println("Выберите вариант вывода:");
- System.out.println("1.Данные выводятся в текстовый файл.");
- System.out.println("2.Данные выводятся в консоль.");
- }
- do {
- isNotCorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Выберите вариант 1 или 2.");
- isNotCorrect = true;
- }
- if (!isNotCorrect && (choice < 1) || (choice > 2)) {
- System.out.println("Ошибка ввода. Выберите вариант 1 или 2.");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- public static int[][] inputSubsequences(int choice, Scanner scan) {
- int twoSubsequences[][];
- twoSubsequences = new int[2][];
- switch (choice) {
- case 1:
- String fileName;
- boolean isNotCorrect;
- FileReader reader = null;
- Scanner scanFile = null;
- do {
- isNotCorrect = false;
- fileName = inputFileName(scan, INPUT);
- try {
- reader = new FileReader(fileName);
- scanFile = new Scanner(reader);
- } catch (FileNotFoundException err) {
- System.out.println("Невозможно прочитать данные из файла!");
- isNotCorrect = true;
- }
- if (!isNotCorrect) {
- twoSubsequences[0] = inputFromFile(scanFile);
- if (twoSubsequences[0] == null)
- isNotCorrect = true;
- else {
- twoSubsequences[1] = inputFromFile(scanFile);
- if (twoSubsequences[1] == null)
- isNotCorrect = true;
- else if (scanFile.hasNext()) {
- System.out.println("В файле присутствуют лишние данные! Повторите ввод имени файла.");
- isNotCorrect = true;
- }
- else {
- scanFile.close();
- try {
- reader.close();
- } catch (IOException err) {
- System.out.println("Невозможно закрыть файл с таким именем! Повторите ввод имени файла.");
- isNotCorrect = true;
- }
- }
- }
- }
- } while(isNotCorrect);
- break;
- default:
- twoSubsequences[0] = inputFromConsole(scan);
- twoSubsequences[1] = inputFromConsole(scan);
- }
- return twoSubsequences;
- }
- public static int[] inputFromConsole(Scanner scan) {
- int n, subsequence[];
- boolean isNotCorrect;
- n = 0;
- System.out.println("Введите количество членов последовательности:");
- do {
- isNotCorrect = false;
- try {
- n = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [1; 20 000]");
- isNotCorrect = true;
- }
- if (!isNotCorrect && (n < 1 || n > 20000)) {
- System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [1; 20 000]");
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- subsequence = new int[n];
- System.out.println("Введите члены последовательности:");
- for (int i = 0; i < n; i++)
- do {
- isNotCorrect = false;
- try{
- subsequence[i] = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException err) {
- System.out.println("Ошибка ввода. Введите целое число.");
- isNotCorrect = true;
- }
- if (!isNotCorrect)
- for (int k = 0; k < i; k++)
- if (subsequence[k] == subsequence[i]) {
- isNotCorrect = true;
- System.out.println("Ошибка ввода. Вы ввели повторяющийся элемент. Повторите ввод элемента.\n");
- }
- } while (isNotCorrect);
- return subsequence;
- }
- public static String inputFileName(Scanner scan, int InOrOutput) {
- String fileName;
- File file;
- switch (InOrOutput) {
- case INPUT:
- System.out.println("Введите имя файла, из которого будут вводиться данные (все входные величины в файле должны быть разделены пробелами, сначала идет число членов последовательности, затем ее члены:");
- do {
- fileName = scan.nextLine();
- file = new File(fileName);
- if (file.exists())
- if (file.canRead())
- return fileName;
- else
- System.out.println("Невозможно открыть для чтения файл с таким именем! Повторите ввод имени файла:");
- else
- System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
- } while (true);
- default:
- System.out.println("Введите имя файла, в который будут выводиться данные:");
- do {
- fileName = scan.nextLine();
- file = new File(fileName);
- if (file.exists()) {
- if (file.canWrite())
- return fileName;
- else
- System.out.println("Невозможно открыть для записи файл с таким именем! Повторите ввод имени файла:");
- }
- else
- System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
- } while(true);
- }
- }
- public static int[] inputFromFile(Scanner scanFile) {
- boolean isNotCorrect;
- int n;
- int subsequence[];
- subsequence = new int[0];
- isNotCorrect = false;
- n = 0;
- if (scanFile.hasNext()) {
- try {
- n = Integer.parseInt(scanFile.next());
- } catch (NumberFormatException err) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isNotCorrect = true;
- }
- if (!isNotCorrect && ((n < 1) || (n > 20000))) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isNotCorrect = true;
- } else {
- subsequence = new int[n];
- for (int i = 0; i < n; i++) {
- if (scanFile.hasNext()) {
- try {
- subsequence[i] = Integer.parseInt(scanFile.next());
- } catch (NumberFormatException err) {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- return null;
- }
- for (int k = 0; k < i; k++)
- if (subsequence[k] == subsequence[i]) {
- System.out.println("В файле содержатся повторяющиеся элементы последовательности! Измените содержание файла и повторите ввод его имени.");
- return null;
- }
- } else {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- return null;
- }
- }
- }
- }
- else {
- System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
- isNotCorrect = true;
- }
- if (isNotCorrect)
- return null;
- else
- return subsequence;
- }
- public static void showSubsequence(int[] subsequence)
- {
- for (int i = 0; i < subsequence.length; i++) {
- System.out.println(subsequence[i]);
- System.out.print(' ');
- }
- }
- }