Калькулятор java введение исключений

Необходимо добавить исключения в рабочий код, но при добавлении через try catch он их не распознает

 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;
                    }
                    try {
                        if (number1<1 || number1 >=10);
                    }catch (Exception e){
                        System.out.println("не верный диапазон");
                    }
                    break;
                default:
                    throw new IllegalArgumentException("Не верный знак операции");
            }
            return result;
        }
    }

Ответы (1 шт):

Автор решения: woesss

try-catch применяется чтобы поймать и обработать исключительную ситуацию. Для генерации исключения применяется throw new. Ваша конструкция ловит исключение и вместо обработки генерирует его же - то есть не имеет смысла, так как внутри блока try его никто не генерирует.
Если вы хотите генерировать исключения при неправильном вводе, делайте это в подходящем условии:

        private static int romanToNumber (String roman) throws InputMismatchException {
            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;
            } else {
                throw new InputMismatchException("Неверный формат данных");
            }
        }

Для того, чтобы обязать пользователя метода обрабатывать ваше исключение (оборачивать в try-catch) - оно должно быть проверяемым (checked). Проверяемыми являются все исключения, кроме потомков RuntimeException и Error. Проверяемые исключения обязательно нужно декларировать в объявлении метода ключевым словом throws, как в примере выше.

→ Ссылка