Не очень понятно какая решается задача. Если это школьная лабораторная на тему изучения Exceptions - то нормально.
Но обычно на исключения строятся такие кейсы которые неудобно ловить проверкой условия. Например ошибки I/O. И логика обработки этих ошибок обычно глобальна. Например целая процедура завершается когда нет доступа к сети. И безразлично где конкретно процедура упала. Нет сети - сразу на выход.
И тут надо не 2 попытки делать а цикл do-while:
do {
input = askForInput();
} while(input < 0);
Кроме того sc.nextInt() бросает 3 вида исключений которые ты как-то не заметил. Их тоже надо отработать.