Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

JAVA: Проверка входных данных, Рекурсия, Исключения

#java #исключения #рекурсия #ввод


Такая проблемка возникла:

Нужно чтобы пользователь вводил число.
Если число не int (например буква), то должно выбрасываться исключение. 
А я как программист должен сделать так, чтобы программа не завершалась и не "пропускала"
пользователя дальше, пока он не введёт корректное значение.

Пробовал через рекурсию. Но тк в стеке творится неведомая **** (на скрине), думаю
этот способ не лучший. 

Посоветуйте что сделать

При корректировке моего кода, учитывайте 1 и 2 задание лабораторной (на скрине)




    


Ответы

Ответ 1



Одно из решений - цикл while. boolean check = true; int fN; while(check) { try { Scanner sc = new Scanner(System.in); check = false; //ставим false, что бы не вводить больше данные System.out.println(...); fN = sc.nextInt(); } catch(Exception ex) { System.out.println(...); check = true; //если вышло исключение, ставим обратно true, что бы опять вводить данные } }

Ответ 2



Нормальный способ. Просто разделите вывод сообщения об ошибке и рекурсивный вызов функции небольшой задержкой, типа Thread.sleep(20);

Ответ 3



Может как-то так попробовать: public static void main(String[] args) throws Exception { System.out.println(InputFirstNumber()); } static int InputFirstNumber() throws IOException { try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) { try { while (true) { System.out.println("Input first number!"); return Integer.parseInt(bufferedReader.readLine()); } } catch (NumberFormatException ex) { System.err.println("\tError!"); System.err.println("\tIncorrect data!"); return InputFirstNumber(); } } }

Ответ 4



Решил таким способом (скрин) В итоге от try и catch пришлось отказаться. Хотя я думаю если добавить Thread.sleep(20); (как советовал тут один человек) То мой изначальный код с рекурсией, будет работать правильно Всем спасибо за помощь) Поставил лайки, но тк у меня рейтинг ниже 15, они кажется не отобразятся......

Комментариев нет:

Отправить комментарий