Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.io.*;
- public class Main {
- private static final int MIN_VALUE = 1;
- private static final int MAX_VALUE = 2000;
- private static final Scanner scan = new Scanner(System.in);
- public static void outputTaskInfo() {
- System.out.println("Данная программа переводит число из десятичной системы счисления в римскую." + "\n" +
- "Диапазон для ввода переводимого числа: " + MIN_VALUE + "..." + MAX_VALUE + ".");
- }
- public static int getVerificationOfChoice() {
- int choice = 0;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (choice != 0 && choice != 1)) {
- System.out.println("Для выбора введите 0 или 1!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return choice;
- }
- public static String inputPathToFile() {
- boolean isIncorrect;
- String path;
- System.out.println("Укажите путь к файлу: ");
- do {
- isIncorrect = false;
- path = scan.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- public static String readNumberFromConsole() {
- String strNumber;
- int number = 0;
- boolean isIncorrect;
- System.out.println("Введите переводимое число: ");
- do {
- isIncorrect = false;
- strNumber = scan.nextLine();
- try {
- number = Integer.parseInt(strNumber);
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (number < MIN_VALUE || number > MAX_VALUE)) {
- System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "! \n");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return strNumber;
- }
- public static String readNumberFromFile(final String path) {
- String strNumber;
- int number = 0;
- System.out.println("Происходит чтение переводимого числа...");
- try (BufferedReader br = new BufferedReader(new FileReader(path))) {
- strNumber = br.readLine();
- number = Integer.parseInt(strNumber);
- } catch (Exception e) {
- System.out.println("Ошибка при чтении данных! Введите число с консоли!");
- strNumber = readNumberFromConsole();
- }
- if (number < MIN_VALUE || number > MAX_VALUE) {
- System.out.println("В файле введено некорректное число! Введите число с консоли!");
- strNumber = readNumberFromConsole();
- }
- return strNumber;
- }
- public static void outputNumber(final int choice, String strNumber, String path) {
- boolean isIncorrect;
- if (choice == 0)
- System.out.println("Введенное число: " + strNumber + ".");
- if (choice == 1) {
- System.out.println("Вывод введенного числа в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path);
- writer.write("Введенное число: " + strNumber + "\n");
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static String processUserInput() {
- String strNumber = "";
- int choiceForInput;
- String pathToIn;
- System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
- choiceForInput = getVerificationOfChoice();
- if (choiceForInput == 0) {
- strNumber = readNumberFromConsole();
- }
- if (choiceForInput == 1) {
- pathToIn = inputPathToFile();
- strNumber = readNumberFromFile(pathToIn);
- }
- return strNumber;
- }
- public static String convertNumber(final String strNumber) {
- final int[] decimalSystem = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000, 2000 };
- final String[] romanSystem = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M", "Z"};
- String romanNumber = "";
- int number = Integer.parseInt(strNumber);
- int i = decimalSystem.length - 1;
- while (number > 0)
- {
- while (decimalSystem[i] > number)
- i--;
- romanNumber += romanSystem[i];
- number -= decimalSystem[i];
- }
- return romanNumber;
- }
- public static void outputRomanNumber(final int choice, final String romanNumber, String path) {
- boolean isIncorrect;
- if (choice == 0)
- System.out.println("Введенное число в римской системе будет равно: " + romanNumber + ".");
- if (choice == 1) {
- System.out.println("Вывод переведенного числа в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- BufferedWriter bufferWriter = new BufferedWriter(writer);
- bufferWriter.write("Введенное число в римской системе будет равно: " + romanNumber + "\n");
- bufferWriter.close();
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static void processUserOutput(final String strNumber, final String romanNumber) {
- int choiceForOutput;
- String pathToOut = "";
- System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
- choiceForOutput = getVerificationOfChoice();
- if (choiceForOutput == 1)
- pathToOut = inputPathToFile();
- outputNumber(choiceForOutput, strNumber, pathToOut);
- outputRomanNumber(choiceForOutput, romanNumber, pathToOut);
- }
- public static void main (String[] args) {
- outputTaskInfo();
- String strNumber = processUserInput();
- String romanNumber = convertNumber(strNumber);
- processUserOutput(strNumber, romanNumber);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement