@Mahorik

Правильно ли я использую исключения в java?

Добрый День!
Помогите разобраться с основами java, а именно с работой с исключениями.
Есть простая программа, спрашивающая из консоли положительное число.
Если число отрицательное выбрасывается исключение и снова вызывается функция запроса числа.
Собственно пара вопросов:
1. Откуда берется java.util.NoSuchElementException, как это исправить?
2. Насколько оправданно в этом случае использование исключений, вместо старого доброго if-else блока?
3. Где стоит обрабатывать исключение. Непосредственно в функции где оно может выпасть или же в функции вызывающей ее?
4. Вообще используется ли прием reвызова функции из блока catch? Или это бред и обычно используются другие паттерны?
Благодарю) Код программы ниже)
import java.util.Scanner;

public class MyProgram {
    public static void main(String[] args) {
        int input;
        try {
             input = askForInput();
        }
        catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
            input = askForInput();
        }
        System.out.println(input);
    }
    private static int askForInput() {
        try (Scanner sc = new Scanner(System.in)) {
            System.out.println("Введите положительное число:");
            int result = sc.nextInt();
            if (result < 0) {
                throw new IllegalArgumentException("Вы ввели отрицательное число");
            }
            return result;
        }
    }
}
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Не очень понятно какая решается задача. Если это школьная лабораторная на тему изучения Exceptions - то нормально.

Но обычно на исключения строятся такие кейсы которые неудобно ловить проверкой условия. Например ошибки I/O. И логика обработки этих ошибок обычно глобальна. Например целая процедура завершается когда нет доступа к сети. И безразлично где конкретно процедура упала. Нет сети - сразу на выход.

И тут надо не 2 попытки делать а цикл do-while:

do {
   input = askForInput();
} while(input < 0);


Кроме того sc.nextInt() бросает 3 вида исключений которые ты как-то не заметил. Их тоже надо отработать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы