#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, они кажется не отобразятся......
Комментариев нет:
Отправить комментарий