/* * Файл: RadixIO.java * Назначение: Класс для управления вводом/выводом в консоль и для управления самой программой, проверки введённых данных. Основа программы. */ package radixarithmetic; // класс содержится в пакете radixarithmetic import java.io.BufferedReader; // подключаем класс для чтения буфера данных import java.io.InputStreamReader; // подключаем класс для чтения потока ввода(input) данных import java.io.IOException; // подключаем класс для управления исключительными ситуациями ввода/вывода public class RadixIO { // объявление класса RadixIO RadixIO() { // конструктор класса System.out.println("--- RadixArithmetic ---\n"); // System.out.println - вывод строки в консоль с переносом строки в конце, \n - перенос строки System.out.println("Введите 'q' в любое поле для ввода и нажмите для выхода\n----------"); this.process(); // вызываем метод process текущего класса } private void process() { BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); // читаем буфер данных из System.in (input поток) String one_dix = null, two_dix = null, result_dix = null; // переменные для хранения систем счисления первого и второго числа, а так же системы счисления результата String one_num = null, two_num = null, operation = null; // для хранения первого, второго числа и операции RadixCore core = new RadixCore(); String yn = null; // завершить или продолжать работу программы do { do { System.out.print("Система счисления первого числа(2, 8, 16): "); // System.out.print - вывод строки в консоль без переноса строки в конце try { // try-catch предназначен для проверки кода на наличие исключительных ситуаций one_dix = read.readLine(); // BufferedReader.readLine() - читает строку из буффера данных }catch(IOException io) { System.out.println("Ошибка ввода/вывода."); } this.checkExit(one_dix); // проверяем нужно ли выйти if(this.checkRadix(one_dix)) // если система счисления поддерживается break; // тогда продолжаем else // иначе System.out.println("Неверная система счисления. Поддерживаются: 2, 8, 16"); } while(true); // бесконечный цикл (для проверки введённых данных) do { System.out.print("Система счисления второго числа(2, 8, 16): "); try { two_dix = read.readLine(); }catch(IOException io) { System.out.println("Ошибка ввода/вывода."); } this.checkExit(two_dix); if(this.checkRadix(two_dix)) break; else System.out.println("Неверная система счисления. Поддерживаются: 2, 8, 16"); } while(true); do { System.out.print("Система счисления результата(2, 8, 16): "); try { result_dix = read.readLine(); }catch(IOException io) { System.out.println("Ошибка ввода/вывода."); } this.checkExit(result_dix); if(this.checkRadix(result_dix)) break; else System.out.println("Неверная система счисления. Поддерживаются: 2, 8, 16"); } while(true); do { System.out.print("Первое число (" + (one_dix.equals("2") ? "двоичная" : (one_dix.equals("8") ? "восьмеричная" : "шестнадцатиричная")) + " система): "); try { one_num = read.readLine(); }catch(IOException io) { System.out.println("Ошибка ввода/вывода."); } this.checkExit(one_num); if(one_dix.equals("2") ? core.checkBinary(one_num) : (one_dix.equals("8") ? core.checkOctal(one_num) : core.checkHex(one_num))) break; else System.out.println("Число не соответствует формату заданной системы счисления!"); } while(true); do { System.out.print("Второе число (" + (two_dix.equals("2") ? "двоичная" : (two_dix.equals("8") ? "восьмеричная" : "шестнадцатиричная")) + " система): "); try { two_num = read.readLine(); }catch(IOException io) { System.out.println("Ошибка ввода/вывода."); } this.checkExit(two_num); if(two_dix.equals("2") ? core.checkBinary(two_num) : (two_dix.equals("8") ? core.checkOctal(two_num) : core.checkHex(two_num))) break; else System.out.println("Число не соответствует формату заданной системы счисления!"); } while(true); do { System.out.print("Операция (+,-,*,/): "); try { operation = read.readLine(); }catch(IOException io) { System.out.println("Ошибка ввода/вывода."); } this.checkExit(operation); if(operation.equals("+") || operation.equals("-") || operation.equals("*") || operation.equals("/")) break; else System.out.println("Неподдерживаемая операция над числами!"); } while(true); System.out.println("----------"); String result_dex = Integer.toString(operation.equals("+") ? Integer.parseInt(core.converter(one_num, one_dix, "10")) + Integer.parseInt(core.converter(two_num, two_dix, "10")) : (operation.equals("-") ? Integer.parseInt(core.converter(one_num, one_dix, "10")) - Integer.parseInt(core.converter(two_num, two_dix, "10")) : (operation.equals("*") ? Integer.parseInt(core.converter(one_num, one_dix, "10")) * Integer.parseInt(core.converter(two_num, two_dix, "10")) : Integer.parseInt(Integer.toString(Integer.parseInt(core.converter(one_num, one_dix, "10")) / Integer.parseInt(core.converter(two_num, two_dix, "10"))))))); //результат в десятичной системе счисления String result = core.converter(result_dex, "10", result_dix); // результат в нужной системе счисления System.out.println(one_num + " " + operation + " " + two_num + " = " + result_dex + "(в десятичной системе) = " + result); System.out.print("----------\nЖелаете выполнить ещё одну операцию? y/n: "); try { yn = read.readLine(); } catch(IOException io) { System.out.println("Ошибка ввода/вывода."); } } while(yn.equalsIgnoreCase("y")); System.out.println("\nСпасибо за использование программы ;-)"); } private void checkExit(String str) { // проверка выхода из программы if(str.equalsIgnoreCase("q")) // str1.equalsIgnoreCase(String two) - сравнение строк str1 и two c игнорированием регистра System.exit(0); // завершение работы программы } private boolean checkRadix(String dix) { // проверка системы счисления return dix.equals("2") || dix.equals("8") || dix.equals("16"); } }