Created
May 24, 2020 09:02
-
-
Save olegrewko/69e1ae8a29f755feec814964b3fbc0a9 to your computer and use it in GitHub Desktop.
Арабо-римский калькулятор
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package calcRA; | |
import java.util.InputMismatchException; | |
import java.util.Scanner; | |
public class RomanArabianCalc { | |
static Scanner scanner = new Scanner(System.in); | |
static int number1, number2; | |
static char operation; | |
static int result; | |
public static void main (String[] args) { | |
System.out.println("Введите выражение [2+2] или два римских числа от I до X:[V+V] + Enter "); | |
// Считываем строку userInput которую ввёл пользователь | |
String userInput = scanner.nextLine(); | |
// Создаём пустой символьный массив длиной 10 символов: under_char | |
char[] under_char = new char[10]; | |
// Заполняем символьный массив символами строки которую ввел пользователь и по ходу ловим знак операции | |
for (int i = 0; i < userInput.length(); i++) { | |
under_char[i] = userInput.charAt(i); | |
if (under_char[i] == '+') { | |
operation = '+'; | |
} | |
if (under_char[i] == '-') { | |
operation = '-'; | |
} | |
if (under_char[i] == '*') { | |
operation = '*'; | |
} | |
if (under_char[i] == '/') { | |
operation = '/'; | |
} | |
} | |
String under_charString = String.valueOf(under_char); | |
String[] blacks = under_charString.split("[+-/*]"); | |
String stable00 = blacks[0]; | |
String stable01 = blacks[1]; | |
String string03 = stable01.trim(); | |
number1 = romanToNumber(stable00); | |
number2 = romanToNumber(string03); | |
if (number1 < 0 && number2 < 0) { | |
result = 0; | |
} else { | |
result = calculated(number1, number2, operation); | |
System.out.println("---Результат для римских цифр----"); | |
String resultRoman = convertNumToRoman(result); | |
System.out.println(stable00 + " " + operation + " " + string03 + " = " + resultRoman); | |
} | |
number1 = Integer.parseInt(stable00); | |
number2 = Integer.parseInt(string03); | |
result = calculated(number1, number2, operation); | |
System.out.println("--Результат для арабских цифр----"); | |
System.out.println(number1 + " " + operation + " " + number2 + " = " + result); | |
} | |
private static String convertNumToRoman (int numArabian) { | |
String[] roman = {"O", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", | |
"XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI", "XXVII", "XXVIII", "XXIX", "XXX", "XXXI", "XXXII", "XXXIII", "XXXIV", "XXXV", "XXXVI", "XXXVII", "XXXVIII", "XXXIX", "XL", | |
"XLI", "XLII", "XLIII", "XLIV", "XLV", "XLVI", "XLVII", "XLVIII", "XLIX", "L", "LI", "LII", "LIII", "LIV", "LV", "LVI", "LVII", "LVIII", "LIX", "LX", | |
"LXI", "LXII", "LXIII", "LXIV", "LXV", "LXVI", "LXVII", "LXVIII", "LXIX", "LXX", | |
"LXXI", "LXXII", "LXXIII", "LXXIV", "LXXV", "LXXVI", "LXXVII", "LXXVIII", "LXXIX", "LXXX", | |
"LXXXI", "LXXXII", "LXXXIII", "LXXXIV", "LXXXV", "LXXXVI", "LXXXVII", "LXXXVIII", "LXXXIX", "XC", | |
"XCI", "XCII", "XCIII", "XCIV", "XCV", "XCVI", "XCVII", "XCVIII", "XCIX", "C" | |
}; | |
final String s = roman[numArabian]; | |
return s; | |
} | |
private static int romanToNumber (String roman) { | |
try { | |
if (roman.equals("I")) { | |
return 1; | |
} else if (roman.equals("II")) { | |
return 2; | |
} else if (roman.equals("III")) { | |
return 3; | |
} else if (roman.equals("IV")) { | |
return 4; | |
} else if (roman.equals("V")) { | |
return 5; | |
} else if (roman.equals("VI")) { | |
return 6; | |
} else if (roman.equals("VII")) { | |
return 7; | |
} else if (roman.equals("VIII")) { | |
return 8; | |
} else if (roman.equals("IX")) { | |
return 9; | |
} else if (roman.equals("X")) { | |
return 10; | |
} | |
} catch (InputMismatchException e) { | |
throw new InputMismatchException("Неверный формат данных"); | |
} | |
return -1; | |
} | |
public static int calculated (int num1, int num2, char op) { | |
int result = 0; | |
switch (op) { | |
case '+': | |
result = num1 + num2; | |
break; | |
case '-': | |
result = num1 - num2; | |
break; | |
case '*': | |
result = num1 * num2; | |
break; | |
case '/': | |
try { | |
result = num1 / num2; | |
} catch (ArithmeticException | InputMismatchException e) { | |
System.out.println("Exception : " + e); | |
System.out.println("Only integer non-zero parameters allowed"); | |
break; | |
} | |
break; | |
default: | |
throw new IllegalArgumentException("Не верный знак операции"); | |
} | |
return result; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Добрый день, скажите пожалуйста, можно будет как то связаться с вами что бы вы мне объяснили кое что по этому коду?