Файл RadixIO java Назначение Класс для управления вводом выводом консо

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
* Файл: 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' в любое поле для ввода и нажмите <Enter> для выхода\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");
}
}