Advertisement
Vernon_Roche

Задание 1 Java (Лабораторная работа 3)

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