Vernon_Roche

Задание 4 Java (Лабораторная работа 2)

Oct 27th, 2023 (edited)
74
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.21 KB | None | 0 0
  1. package com.example.lab4;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.util.Scanner;
  8. import java.io.FileWriter;
  9.  
  10. public class Lab4 {
  11.     final static int INPUT = 1, OUTPUT = 2;
  12.  
  13.     public static void main(String args[]) {
  14.         int twoSubsequences[][], combination[], choice;
  15.         Scanner scan = new Scanner(System.in);
  16.         System.out.println("Программа строит объединение двух последовательностей целых чисел, в которых нет повторяющихся элементов.");
  17.         choice = chooseWay(INPUT, scan);
  18.         twoSubsequences = inputSubsequences(choice, scan);
  19.         combination = makeCombination(twoSubsequences[0], twoSubsequences[1]);
  20.         choice = chooseWay(OUTPUT, scan);
  21.         outputSubsequences(combination, choice, scan);
  22.         scan.close();
  23.     }
  24.  
  25.     public static void outputSubsequences(int[] combination, int choice, Scanner scan) {
  26.         switch (choice) {
  27.             case 1: {
  28.                 String fileName;
  29.                 boolean isNotCorrect;
  30.                 FileWriter writer = null;
  31.                 do {
  32.                     isNotCorrect = false;
  33.                     fileName = inputFileName(scan, OUTPUT);
  34.                     try {
  35.                         writer = new FileWriter(fileName);
  36.                     } catch (IOException err) {
  37.                         isNotCorrect = true;
  38.                         System.out.println("Невозможно открыть файл для записи! Повторите ввод имени файла.");
  39.                     }
  40.                     if (!isNotCorrect) {
  41.                         isNotCorrect = outputInFile(combination, writer);
  42.                         if (!isNotCorrect ) {
  43.                             try {
  44.                                 writer.close();
  45.                             } catch (IOException err) {
  46.                                 isNotCorrect = true;
  47.                                 System.out.println("Ошибка при закрытии файла! Повторите ввод имени файла.");
  48.                             }
  49.                         }
  50.                     }
  51.                 } while (isNotCorrect);
  52.                 System.out.print("Искомые данные выведены в файл ");
  53.                 System.out.println(fileName);
  54.                 break;
  55.             }
  56.             default:
  57.                 System.out.println("Искомая последовательность:");
  58.                 showSubsequence(combination);
  59.         }
  60.     }
  61.  
  62.     public static boolean outputInFile(int[] combination, FileWriter writer) {
  63.         for (int i = 0; i < combination.length; i++) {
  64.             try {
  65.                 writer.write(Integer.toString(combination[i]));
  66.                 writer.write(' ');
  67.             } catch (IOException err) {
  68.                 System.out.println("Невозможно записать данные в файл! Повторите ввод имени файла!");
  69.                 return true;
  70.             }
  71.         }
  72.         return false;
  73.     }
  74.  
  75.     public static int[] makeCombination(int[] subsequence1, int[] subsequence2) {
  76.         int combination[], k, counter;
  77.         boolean isInclusion;
  78.         counter = subsequence1.length;
  79.         for (int i = 0; i < subsequence2.length; i++) {
  80.             isInclusion = false;
  81.             k = 0;
  82.             while (!isInclusion && k < subsequence1.length) {
  83.                 if (subsequence1[k] == subsequence2[i])
  84.                     isInclusion = true;
  85.                 k++;
  86.             }
  87.             if (!isInclusion)
  88.                 counter++;
  89.         }
  90.         combination = new int[counter];
  91.         counter = subsequence1.length;
  92.         for (int i = 0; i < subsequence1.length; i++)
  93.             combination[i] = subsequence1[i];
  94.         for (int i = 0; i < subsequence2.length; i++) {
  95.             isInclusion = false;
  96.             k = 0;
  97.             while (!isInclusion && k < subsequence1.length) {
  98.                 if (subsequence1[k] == subsequence2[i])
  99.                     isInclusion = true;
  100.                 k++;
  101.             }
  102.             if (!isInclusion) {
  103.                 combination[counter] = subsequence2[i];
  104.                 counter++;
  105.             }
  106.         }
  107.         return combination;
  108.     }
  109.  
  110.     public static int chooseWay(final int InOrOutput, Scanner scan) {
  111.         int choice;
  112.         boolean isNotCorrect;
  113.         choice = 0;
  114.         switch (InOrOutput) {
  115.             case INPUT:
  116.                 System.out.println("Выберите вариант ввода:");
  117.                 System.out.println("1.Данные вводятся из текстового файла.");
  118.                 System.out.println("2.Данные вводятся через консоль.");
  119.                 break;
  120.             default:
  121.                 System.out.println("Выберите вариант вывода:");
  122.                 System.out.println("1.Данные выводятся в текстовый файл.");
  123.                 System.out.println("2.Данные выводятся в консоль.");
  124.         }
  125.         do {
  126.             isNotCorrect = false;
  127.             try {
  128.                 choice = Integer.parseInt(scan.nextLine());
  129.             }
  130.             catch (NumberFormatException err) {
  131.                 System.out.println("Ошибка ввода. Выберите вариант 1 или 2.");
  132.                 isNotCorrect = true;
  133.             }
  134.             if (!isNotCorrect && (choice < 1) || (choice > 2)) {
  135.                 System.out.println("Ошибка ввода. Выберите вариант 1 или 2.");
  136.                 isNotCorrect = true;
  137.             }
  138.         } while (isNotCorrect);
  139.         return choice;
  140.     }
  141.  
  142.     public static int[][] inputSubsequences(int choice, Scanner scan) {
  143.         int twoSubsequences[][];
  144.         twoSubsequences = new int[2][];
  145.         switch (choice) {
  146.             case 1:
  147.                 String fileName;
  148.                 boolean isNotCorrect;
  149.                 FileReader reader = null;
  150.                 Scanner scanFile = null;
  151.                 do {
  152.                     isNotCorrect = false;
  153.                     fileName = inputFileName(scan, INPUT);
  154.                     try {
  155.                         reader = new FileReader(fileName);
  156.                         scanFile = new Scanner(reader);
  157.                     } catch (FileNotFoundException err) {
  158.                         System.out.println("Невозможно прочитать данные из файла!");
  159.                         isNotCorrect = true;
  160.                     }
  161.                     if (!isNotCorrect) {
  162.                         twoSubsequences[0] = inputFromFile(scanFile);
  163.                         if (twoSubsequences[0] == null)
  164.                             isNotCorrect = true;
  165.                         else {
  166.                             twoSubsequences[1] = inputFromFile(scanFile);
  167.                             if (twoSubsequences[1] == null)
  168.                                 isNotCorrect = true;
  169.                             else if (scanFile.hasNext()) {
  170.                                 System.out.println("В файле присутствуют лишние данные! Повторите ввод имени файла.");
  171.                                 isNotCorrect = true;
  172.                             }
  173.                             else {
  174.                                 scanFile.close();
  175.                                 try {
  176.                                     reader.close();
  177.                                 } catch (IOException err) {
  178.                                     System.out.println("Невозможно закрыть файл с таким именем! Повторите ввод имени файла.");
  179.                                     isNotCorrect = true;
  180.                                 }
  181.                             }
  182.                         }
  183.                     }
  184.                 } while(isNotCorrect);
  185.                 break;
  186.             default:
  187.                 twoSubsequences[0] = inputFromConsole(scan);
  188.                 twoSubsequences[1] = inputFromConsole(scan);
  189.         }
  190.         return twoSubsequences;
  191.     }
  192.  
  193.     public static int[] inputFromConsole(Scanner scan) {
  194.         int n, subsequence[];
  195.         boolean isNotCorrect;
  196.         n = 0;
  197.         System.out.println("Введите количество членов последовательности:");
  198.         do {
  199.             isNotCorrect = false;
  200.             try {
  201.                 n = Integer.parseInt(scan.nextLine());
  202.             }
  203.             catch (NumberFormatException err) {
  204.                 System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [1; 20 000]");
  205.                 isNotCorrect = true;
  206.             }
  207.             if (!isNotCorrect && (n < 1 || n > 20000)) {
  208.                 System.out.println("Ошибка ввода. Введите натуральное число в диапазоне [1; 20 000]");
  209.                 isNotCorrect = true;
  210.             }
  211.         } while (isNotCorrect);
  212.         subsequence = new int[n];
  213.         System.out.println("Введите члены последовательности:");
  214.         for (int i = 0; i < n; i++)
  215.             do {
  216.                 isNotCorrect = false;
  217.                 try{
  218.                     subsequence[i] = Integer.parseInt(scan.nextLine());
  219.                 }
  220.                 catch (NumberFormatException err) {
  221.                     System.out.println("Ошибка ввода. Введите целое число.");
  222.                     isNotCorrect = true;
  223.                 }
  224.                 if (!isNotCorrect)
  225.                     for (int k = 0; k < i; k++)
  226.                         if (subsequence[k] == subsequence[i]) {
  227.                             isNotCorrect = true;
  228.                             System.out.println("Ошибка ввода. Вы ввели повторяющийся элемент. Повторите ввод элемента.\n");
  229.                         }
  230.             } while (isNotCorrect);
  231.         return subsequence;
  232.     }
  233.  
  234.     public static String inputFileName(Scanner scan, int InOrOutput) {
  235.         String fileName;
  236.         File file;
  237.         switch (InOrOutput) {
  238.             case INPUT:
  239.                 System.out.println("Введите имя файла, из которого будут вводиться данные (все входные величины в файле должны быть разделены пробелами, сначала идет число членов последовательности, затем ее члены:");
  240.                 do {
  241.                     fileName = scan.nextLine();
  242.                     file = new File(fileName);
  243.                     if (file.exists())
  244.                         if (file.canRead())
  245.                             return fileName;
  246.                         else
  247.                             System.out.println("Невозможно открыть для чтения файл с таким именем! Повторите ввод имени файла:");
  248.                     else
  249.                         System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
  250.                 } while (true);
  251.             default:
  252.                 System.out.println("Введите имя файла, в который будут выводиться данные:");
  253.                 do {
  254.                     fileName = scan.nextLine();
  255.                     file = new File(fileName);
  256.                     if (file.exists()) {
  257.                         if (file.canWrite())
  258.                             return fileName;
  259.                         else
  260.                             System.out.println("Невозможно открыть для записи файл с таким именем! Повторите ввод имени файла:");
  261.                     }
  262.                     else
  263.                         System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
  264.                 } while(true);
  265.         }
  266.     }
  267.  
  268.     public static int[] inputFromFile(Scanner scanFile) {
  269.         boolean isNotCorrect;
  270.         int n;
  271.         int subsequence[];
  272.         subsequence = new int[0];
  273.         isNotCorrect = false;
  274.         n = 0;
  275.         if (scanFile.hasNext()) {
  276.             try {
  277.                 n = Integer.parseInt(scanFile.next());
  278.             } catch (NumberFormatException err) {
  279.                 System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
  280.                 isNotCorrect = true;
  281.             }
  282.             if (!isNotCorrect && ((n < 1) || (n > 20000))) {
  283.                 System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
  284.                 isNotCorrect = true;
  285.             } else {
  286.                 subsequence = new int[n];
  287.                 for (int i = 0; i < n; i++) {
  288.                     if (scanFile.hasNext()) {
  289.                         try {
  290.                             subsequence[i] = Integer.parseInt(scanFile.next());
  291.                         } catch (NumberFormatException err) {
  292.                             System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
  293.                             return null;
  294.                         }
  295.                         for (int k = 0; k < i; k++)
  296.                             if (subsequence[k] == subsequence[i]) {
  297.                                 System.out.println("В файле содержатся повторяющиеся элементы последовательности! Измените содержание файла и повторите ввод его имени.");
  298.                                 return null;
  299.                             }
  300.                     } else {
  301.                         System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
  302.                         return null;
  303.                     }
  304.                 }
  305.             }
  306.         }
  307.         else {
  308.             System.out.println("В файле содержатся неверные данные! Измените содержание файла и повторите ввод его имени.");
  309.             isNotCorrect = true;
  310.         }
  311.         if (isNotCorrect)
  312.             return null;
  313.         else
  314.             return subsequence;
  315.     }
  316.  
  317.     public static void showSubsequence(int[] subsequence)
  318.     {
  319.         for (int i = 0; i < subsequence.length; i++) {
  320.             System.out.println(subsequence[i]);
  321.             System.out.print(' ');
  322.         }
  323.     }
  324. }
Comments
Add Comment
Please, Sign In to add comment