Advertisement
anticlown

Laba.3.1(Java)

Nov 6th, 2022 (edited)
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.25 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.   private static final int MIN_VALUE = 1;
  6.   private static final int MAX_VALUE = 2000;
  7.   private static final Scanner scan = new Scanner(System.in);
  8.  
  9.   public static void outputTaskInfo() {
  10.     System.out.println("Данная программа переводит число из десятичной системы счисления в римскую." + "\n" +
  11.                        "Диапазон для ввода переводимого числа: " + MIN_VALUE + "..." + MAX_VALUE + ".");
  12.   }
  13.  
  14.   public static int getVerificationOfChoice() {
  15.     int choice = 0;
  16.     boolean isIncorrect;
  17.  
  18.     do {
  19.       isIncorrect = false;
  20.       try {
  21.         choice = Integer.parseInt(scan.nextLine());
  22.       } catch (NumberFormatException e) {
  23.         System.out.println("Проверьте корректность ввода данных!");
  24.         isIncorrect = true;
  25.       }
  26.       if (!isIncorrect && (choice != 0 && choice != 1)) {
  27.         System.out.println("Для выбора введите 0 или 1!");
  28.         isIncorrect = true;
  29.       }
  30.     } while (isIncorrect);
  31.  
  32.     return choice;
  33.   }
  34.  
  35.   public static String inputPathToFile() {
  36.     boolean isIncorrect;
  37.     String path;
  38.  
  39.     System.out.println("Укажите путь к файлу: ");
  40.  
  41.     do {
  42.       isIncorrect = false;
  43.       path = scan.nextLine();
  44.       File file = new File(path);
  45.  
  46.       if (!file.exists()) {
  47.         System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
  48.         isIncorrect = true;
  49.       }
  50.     } while (isIncorrect);
  51.  
  52.     return path;
  53.   }
  54.  
  55.   public static String readNumberFromConsole() {
  56.     String strNumber;
  57.     int number = 0;
  58.     boolean isIncorrect;
  59.  
  60.     System.out.println("Введите переводимое число: ");
  61.  
  62.     do {
  63.       isIncorrect = false;
  64.       strNumber = scan.nextLine();
  65.       try {
  66.         number = Integer.parseInt(strNumber);
  67.       } catch (NumberFormatException e) {
  68.         System.out.println("Проверьте корректность ввода данных!");
  69.         isIncorrect = true;
  70.       }
  71.       if (!isIncorrect && (number < MIN_VALUE || number > MAX_VALUE)) {
  72.         System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "! \n");
  73.         isIncorrect = true;
  74.       }
  75.     } while (isIncorrect);
  76.  
  77.     return strNumber;
  78.   }
  79.  
  80.   public static String readNumberFromFile(final String path) {
  81.     String strNumber;
  82.     int number = 0;
  83.  
  84.     System.out.println("Происходит чтение переводимого числа...");
  85.  
  86.     try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  87.       strNumber = br.readLine();
  88.       number = Integer.parseInt(strNumber);
  89.     } catch (Exception e) {
  90.       System.out.println("Ошибка при чтении данных! Введите число с консоли!");
  91.       strNumber = readNumberFromConsole();
  92.     }
  93.  
  94.     if (number < MIN_VALUE || number > MAX_VALUE) {
  95.       System.out.println("В файле введено некорректное число! Введите число с консоли!");
  96.       strNumber = readNumberFromConsole();
  97.     }
  98.  
  99.     return strNumber;
  100.   }
  101.  
  102.   public static void outputNumber(final int choice, String strNumber, String path) {
  103.     boolean isIncorrect;
  104.  
  105.     if (choice == 0)
  106.       System.out.println("Введенное число: " + strNumber + ".");
  107.  
  108.     if (choice == 1) {
  109.       System.out.println("Вывод введенного числа в файл...");
  110.  
  111.       do {
  112.         isIncorrect = false;
  113.         try {
  114.           FileWriter writer = new FileWriter(path);
  115.           writer.write("Введенное число: " + strNumber + "\n");
  116.           writer.close();
  117.         } catch (IOException e) {
  118.           isIncorrect = true;
  119.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  120.           path = inputPathToFile();
  121.         }
  122.       } while (isIncorrect);
  123.  
  124.       System.out.println("Данные успешно записаны в файл!");
  125.     }
  126.   }
  127.  
  128.   public static String processUserInput() {
  129.     String strNumber = "";
  130.     int choiceForInput;
  131.     String pathToIn;
  132.  
  133.     System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
  134.     choiceForInput = getVerificationOfChoice();
  135.  
  136.     if (choiceForInput == 0) {
  137.       strNumber = readNumberFromConsole();
  138.     }
  139.     if (choiceForInput == 1) {
  140.       pathToIn = inputPathToFile();
  141.       strNumber = readNumberFromFile(pathToIn);
  142.     }
  143.  
  144.     return strNumber;
  145.   }
  146.  
  147.   public static String convertNumber(final String strNumber) {
  148.     final int[] decimalSystem = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000, 2000 };
  149.     final String[] romanSystem = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M", "Z"};
  150.     String romanNumber = "";
  151.     int number = Integer.parseInt(strNumber);
  152.     int i = decimalSystem.length - 1;
  153.  
  154.     while (number > 0)
  155.     {
  156.       while (decimalSystem[i] > number)
  157.         i--;
  158.  
  159.       romanNumber += romanSystem[i];
  160.       number -= decimalSystem[i];
  161.     }
  162.  
  163.     return romanNumber;
  164.   }
  165.  
  166.   public static void outputRomanNumber(final int choice, final String romanNumber, String path) {
  167.     boolean isIncorrect;
  168.  
  169.     if (choice == 0)
  170.       System.out.println("Введенное число в римской системе будет равно: " + romanNumber + ".");
  171.  
  172.     if (choice == 1) {
  173.       System.out.println("Вывод переведенного числа в файл...");
  174.  
  175.       do {
  176.         isIncorrect = false;
  177.         try {
  178.           FileWriter writer = new FileWriter(path, true);
  179.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  180.  
  181.           bufferWriter.write("Введенное число в римской системе будет равно: " + romanNumber + "\n");
  182.           bufferWriter.close();
  183.           writer.close();
  184.         } catch (IOException e) {
  185.           isIncorrect = true;
  186.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  187.           path = inputPathToFile();
  188.         }
  189.       } while (isIncorrect);
  190.  
  191.       System.out.println("Данные успешно записаны в файл!");
  192.     }
  193.   }
  194.  
  195.   public static void processUserOutput(final String strNumber, final String romanNumber) {
  196.     int choiceForOutput;
  197.     String pathToOut = "";
  198.  
  199.     System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
  200.     choiceForOutput = getVerificationOfChoice();
  201.  
  202.     if (choiceForOutput == 1)
  203.       pathToOut = inputPathToFile();
  204.  
  205.     outputNumber(choiceForOutput, strNumber, pathToOut);
  206.     outputRomanNumber(choiceForOutput, romanNumber, pathToOut);
  207.   }
  208.  
  209.   public static void main (String[] args) {
  210.     outputTaskInfo();
  211.     String strNumber = processUserInput();
  212.     String romanNumber = convertNumber(strNumber);
  213.     processUserOutput(strNumber, romanNumber);
  214.  
  215.     scan.close();
  216.   }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement