Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- public class Lab1 {
- final static int INPUT = 1,
- OUTPUT = 2,
- NULL_CODE = 48,
- NINE_CODE = 57;
- public static void main(String[] args) {
- String text;
- int choice;
- int[] numbers;
- Scanner scan = new Scanner(System.in);
- System.out.println("Программа выводит содержащиеся в тексте (текст должен содержать от 1 до 4 цифровых символов, отображающих целые числа от 1 до 2000) числа в десятичной и римской системах счисления.");
- choice = chooseWay(INPUT, scan);
- text = inputText(choice, scan);;
- numbers = searchNumbers(text);
- choice = chooseWay(OUTPUT, scan);
- outputNumbers(numbers, choice, scan);
- scan.close();
- }
- public static void outputNumbers(int[] numbers, int choice, Scanner scan) {
- switch (choice) {
- case 1: {
- String fileName;
- boolean isCorrect;
- do {
- fileName = inputFileName(scan, OUTPUT);
- isCorrect = outputInFile(fileName, numbers);
- } while (!isCorrect);
- System.out.print("Искомые данные выведены в файл ");
- System.out.println(fileName);
- break;
- }
- default:
- outputInConsole(numbers);
- }
- }
- public static void outputInConsole(int[] numbers) {
- int i;
- System.out.println("Искомые числа:");
- i = 0;
- while ((numbers[i] != 0) && (i < 4)) {
- System.out.print(numbers[i]);
- System.out.print(' ');
- i++;
- }
- System.out.println("\nИх представление в римской системе счисления:");
- i = 0;
- while ((numbers[i] != 0) && (i < 4)) {
- System.out.print(convertToRoman(numbers[i]));
- System.out.print(' ');
- i++;
- }
- }
- public static boolean outputInFile(String fileName, int[] numbers) {
- int i;
- FileWriter writer;
- try {
- writer = new FileWriter(fileName);
- } catch (IOException err) {
- System.out.println("Невозможно открыть файл для записи. Повторите ввод имени файла.");
- return false;
- }
- i = 0;
- while ((numbers[i] != 0) && (i < 4)) {
- try {
- writer.write(Integer.toString(numbers[i]));
- writer.write(' ');
- } catch (IOException err) {
- System.out.println("Невозможно записать данные в введенный файл. Повторите ввод имени файла.");
- return false;
- }
- i++;
- }
- try {
- writer.write('\n');
- } catch (IOException e) {
- System.out.println("Невозможно записать данные в введенный файл. Повторите ввод имени файла.");
- return false;
- }
- i = 0;
- while ((numbers[i] != 0) && (i < 4)) {
- try {
- writer.write(convertToRoman(numbers[i]));
- writer.write(' ');
- } catch (IOException e) {
- System.out.println("Невозможно записать данные в введенный файл. Повторите ввод имени файла.");
- return false;
- }
- i++;
- }
- try {
- writer.close();
- } catch (IOException err) {
- System.out.println("Невозможно закрыть введенный файл. Повторите ввод имени файла.");
- return false;
- }
- return true;
- }
- public static String convertToRoman(int number) {
- final String[][] romanNumbers = {{"", "", "", ""},
- {"M", "C,", "X", "I"},
- {"MM", "CC", "XX", "II"},
- {"", "CCC", "XXX", "III"},
- {"", "CD", "XL", "IV"},
- {"", "D", "L", "V"},
- {"", "DC", "LX", "VI"},
- {"", "DCC", "LXX", "VII"},
- {"", "DCCC", "LXXX", "VIII"},
- {"", "CM", "XC", "IX"}};
- int counter;
- String convertedNum;
- convertedNum = "";
- counter = 3;
- while (number != 0) {
- convertedNum = romanNumbers[number % 10][counter] + convertedNum;
- number = number / 10;
- counter--;
- }
- return convertedNum;
- }
- public static int[] searchNumbers(String text) {
- String foundedNum;
- int position, length;
- int[] arrayNumbers;
- arrayNumbers = new int[] {0, 0, 0, 0};
- foundedNum = "";
- position = 0;
- length = 0;
- while (position < text.length()) {
- if (checkNum(text.charAt(position))) {
- foundedNum = foundedNum + text.charAt(position);
- length++;
- position++;
- while (position < text.length() && checkNum(text.charAt(position))) {
- foundedNum = foundedNum + text.charAt(position);
- position++;
- }
- arrayNumbers[length - 1] = Integer.parseInt(foundedNum);
- foundedNum = "";
- }
- position++;
- }
- return arrayNumbers;
- }
- 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 String inputText(final int choice, Scanner scan)
- {
- String text;
- text = "";
- switch (choice) {
- case 1: {
- String fileName;
- boolean isCorrect;
- do {
- do {
- fileName = inputFileName(scan, INPUT);
- text = inputFromFile(fileName);
- isCorrect = !(text == null);
- } while (!isCorrect);
- isCorrect = checkText(text);
- if (!isCorrect)
- System.out.println("Введенный текст не соответствует условию! Повторите ввод имени файла.");
- } while (!isCorrect);
- break;
- }
- default:
- text = inputFromConsole(scan);
- }
- return text;
- }
- public static String inputFromConsole(Scanner scan) {
- boolean isCorrect;
- String text;
- do {
- System.out.println("Введите строку для обработки:");
- text = scan.nextLine();
- isCorrect = checkText(text);
- if (!isCorrect)
- System.out.println("Введенная строка не соответствует условию! Повторите ввод.");
- } while (!isCorrect);
- return text;
- }
- public static boolean checkText(String text) {
- String foundedNum;
- boolean isCorrect;
- int quantityNumbers, position;
- foundedNum = "";
- quantityNumbers = 0;
- position = 0;
- isCorrect = true;
- while (isCorrect && position < text.length()) {
- if (checkNum(text.charAt(position))) {
- foundedNum = foundedNum + text.charAt(position);
- quantityNumbers++;
- position++;
- while (quantityNumbers <= 4 && position < text.length() && checkNum(text.charAt(position))) {
- foundedNum = foundedNum + text.charAt(position);
- position++;
- quantityNumbers++;
- }
- if ((quantityNumbers > 4) || (Integer.parseInt(foundedNum) == 0) || Integer.parseInt(foundedNum) > 2000)
- isCorrect = false;
- foundedNum = "";
- }
- position++;
- }
- if (quantityNumbers == 0)
- isCorrect = false;
- return isCorrect;
- }
- public static boolean checkNum(char verifiableNum) {
- boolean isNum;
- int i;
- isNum = false;
- i = NULL_CODE;
- while (!isNum && (i <= NINE_CODE)) {
- isNum = verifiableNum == i;
- i++;
- }
- return isNum;
- }
- public static String inputFileName(Scanner scan, int InOrOutput) {
- String fileName;
- File file;
- switch (InOrOutput) {
- case INPUT:
- System.out.println("Введите имя файла, из которого будут вводиться данные:");
- do {
- fileName = scan.nextLine();
- if (fileName.endsWith(".txt")) {
- file = new File(fileName);
- if (file.exists())
- if (file.canRead())
- return fileName;
- else
- System.out.println("Невозможно открыть для чтения файл с таким именем! Повторите ввод имени файла:");
- else
- System.out.println("Файл с таким именем не существует! Повторите ввод имени файла:");
- }
- else
- System.out.println("Файл должен иметь расширение .txt! Повторите ввод имени файла:");
- } 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 String inputFromFile(String fileName) {
- File inputFile = new File(fileName);
- String text;
- text = "";
- Scanner scanFile = null;
- try {
- scanFile = new Scanner(inputFile);
- } catch (FileNotFoundException err) {
- System.out.println("Невозможно прочитать данные из файла с таким именем! Повторите ввод имени файла.");
- return null;
- }
- while (scanFile.hasNext())
- text = text + scanFile.nextLine();
- scanFile.close();
- return text;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement