Метод в try..catch

  • 6
  • Недоступна
Вероятно, каждый из вас хотя бы раз в жизни ошибался при вводе пароля или других текстов. Давайте защитим программу от случайного ввода «не тех» данных. В задачке пользователь вводит с клавиатуры числа, а если он введёт что-то другое, то должен сработать метод, перехватывающий исключение, и вывести на экран все ранее введенные числа.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (223)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Andrusha9 уровень, Минск
вчера, 11:37
работает просто через Exception
Михаил Клименко11 уровень, Краснодар
28 May, 18:16
Валидатор принял с catch (Exception e), заполнял ArrayList через while(true)
Garadzienski16 уровень, Kraków
21 May, 07:44
Сделал через while (true) внутри цикла try где считываем значение с клавиатуры и сразу же выводим на экран. в catch ловим IOException.
25 May, 19:29
Хм, у меня с IOException не прокатило. Я заморачиваться не стал и Throwable написал
Alexander Korzhov12 уровень, Минск
18 May, 11:03
решил при помощи ArrayList, но не понял, почему валидатор принимает такое решение, тк написано, что код внутри readData() надо обернуть в try..catch, а ArrayList создаётся снаружи блока try..catch
Oleg 10 уровень, Санкт-Петербург
16 May, 16:05
Зачем массив? Сразу поймали число в try - на вывод его. int str = Integer.parseInt(reader.readLine()); Если поломалось (пофиг какая ошибка)- break. Всё в цикле while(true)
Ismagilova Antonina10 уровень, Новосибирск
26 May, 14:54
так и начала делать,но застряла... заглянула в обсуждение и перепугалась, что не верно делаю. Но муж в очередной раз меня спас от депрессии:)))
Life DIY15 уровень, Екатеринбург
14 May, 10:20
Сделал. Короче ловил IOException что бы не было InterruptedException и во втором catch ловил NumberFormat чтобы обработать дичь которая образуется при попытке в интовый массив запихать стрингу, ну и в теле этого catch вывел поэлементно весь массив что уже успел собраться.
Life DIY15 уровень, Екатеринбург
14 May, 09:18
Чо то я понять не могу числа нужно вводить через Enter&
Life DIY15 уровень, Екатеринбург
14 May, 09:40
Еб@. А оказывается к переменным то внутри try мы хер больше обратимся, даже в catch((...
Алексей Подъянов14 уровень, Екатеринбург
8 May, 17:35
Вроде читал что ArrayList по умолчанию size = 10. Или как то не так это работает?
Sergey12 уровень, Ярославль
8 May, 18:18
Наверное тут читал. Но там же написано, что когда коллекция не заполнена, то применив к коллекции метод size() получим значение = 0) Игра слов получается или не очень хороший перевод. Скорей всего имеется ввиду, что при создании коллекции ArrayList по умолчанию, в ней резервируется 10 ячеек, в которые можно записать 10 значений, то есть мы резервируем место (ресурс памяти). Но сам размер - количество элементов в коллекции пока еще равно 0 ).
Life DIY15 уровень, Екатеринбург
14 May, 10:16
По умолчанию ArrayList равен 16 нодам, но ноды и размер не одно и тоже. Ноды это незаполненные части, а элементы это заполненные ноды. Если чушь несу поправьте...
Vlad20 уровень, Львов
22 May, 11:05
немного не так по умолчанию в ArrayList размер массива 10 при добавлений объекта в индекс 11 он автоматически увеличивается до размера n / 2 + 1, n текущий размер массива. Об корзины это немножко не туда это о HasMap.
Алексей Подъянов14 уровень, Екатеринбург
8 May, 16:16
Не могу понять. В ArrayList<Integer> list через for (int i = 0;i<list.size();i++) {list.add(Integer.parseInt(reader.readLine()));} делал не работало, а через while (true) зашло. Почему?
Sergey12 уровень, Ярославль
8 May, 17:05
Ну так логично же) Пока ты еще ничего не записал size = 0, а условие выполнения цикла: выполнять пока size > 0. Цикл завершил свою работу не успев начать работать) Сделай int i = -1 заработает и через for )
Sergey12 уровень, Ярославль
5 May, 15:27
Если ловить через IOException, то выводим на экран числа через finally. Если через Exception, то вывод на экран можно выполнить к catch.
Кирилл СПб11 уровень, Санкт-Петербург
6 May, 18:32
вот этот момент можно подробнее, почему так?
Sergey12 уровень, Ярославль
6 May, 20:29
Мы указываем в catch, что ловим IOException, как предлагает idea. При запуске кода возникает не исключение IOException, а исключение NumberFormatException. (компилятор выводит в сообщении красным после завершения кода) Поэтому наш catch не срабатывает и все, что мы в нем напишем не будет воспроизведено. Когда же мы вместо IOException указываем, что ловим Exception от которого наследуют и IOException, и NumberFormatException, то catch срабатывает, ведь мы поймали одно из всего множества Exception.
Кирилл СПб11 уровень, Санкт-Петербург
7 May, 06:09
правильно ли понимаю, что в данном случае необходимо ловить через
(IOException | NumberFormatException e)
Потому что по отдельности они не ловят. Но почему так?
Sergey12 уровень, Ярославль
7 May, 16:24
Я думаю все дело в том, что исключение IOException относится к исключениям которые мы обязаны ловить, так называемые checked. Без указания поимки этого исключения компилятор не скомпилирует программу. А вот NumberFormatException относится к исключениям, которые компилятор пропускает, так называемые uncheked. Это исключение идет по ветке RuntimeException. Т.е. компилятор считает: "Хочешь поймать NumberFormatException Ок, прописывай в еще одном catch или через "или" в том же catch, не хочешь не лови,а вот IOException будь добр поймай, без него я не запущусь, ведь ты открыл поток BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) и его обязательно нужно закрыть!" В этой лекции написано про checked и unchecked