Разные методы для разных типов

  • 16
  • Недоступна
Итак, полиморфизм. Вы о нём ещё не забыли? Тогда решаем следующую задачку: считываем с консоли данные, пока не будет введено слово "exit". Для каждого значения, кроме "exit", вызываем метод print, какой именно принт — зависит от значения. Например, если значение содержит точку, то вызываем print для Double, а если это число от 0 до 128 — то для short.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (391)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Cruelz15 уровень, Санкт-Петербург
10 часов назад
Решаешь задачу, тестишь, всё работает. А потом воюешь с валидатором джавыраш, ведь он не принимает твои решения, ведь не всё вынесено в условия задачи. Совет - не создавайте отдельные методы для определения, какой print запускать, делайте простыню с кучей трайкатч в одном блоке, пусть тот, кто читает ваш код плачет.
Rono22 уровень, Санкт-Петербург
28 июля, 16:48
То, что в программировании у задачи может быть n>1 правильных вариантов решения валидатором сайта благополучно игнорируется, прикольно.
25 июля, 09:22
try catch easy breazy) short->int>double->string
Alexander Korzhov18 уровень, Минск
7 июля, 13:46
Решил поделиться своим решением, может кому-то поможет Вначале создаём BufferedReader, думаю, как это делать на 15 уровне все уже знают) Дальше создаём цикл while, который будет работать до момента, пока не будет введено "exit"
while(true){
           String value = reader.readLine();
           if(value.equals("exit")) break;
После этого создаём блок трай/кэтч для того, чтобы если у программы не полуается парсить наш value в Double/Short/Integer в блоке трай, то она вызывала бы метод для стринга в блоке кэтч:
else try {
                if (value.contains(".")) print(Double.parseDouble(value));
                else if(Integer.parseInt(value) <= 0 || Integer.parseInt(value) >= 128) print(Integer.parseInt(value));
                else if(Integer.parseInt(value) > 0 && Integer.parseInt(value) < 128) print(Short.parseShort(value));

            }   catch (NumberFormatException nfe){
                print(value);
            }
Поочередность(в блоке трай) проверки того, какой именно метод нам нужно вызывать для различных числовых значений, по идее должна быть именно такой (но это не точно😄) Ну и не забываем закрывать наш буффередридер, что я, конечно же, сделать забыл Вот этот материал натолкнул меня на правильное решение
14 июля, 01:47
спасибо!
Виктор Яценко16 уровень, Санкт-Петербург
15 июля, 20:24
красиво, 2 вечера голову ломал
Евгений16 уровень, Краснодар
21 июля, 09:14
5 раз используете преобразование Integer.parseInt. Более оптимально вычислить один раз значение, присвоить его переменной и потом уже использовать эту переменную в нужных местах. Так вы ускорите выполнение программы за счет экономии вычислительных ресурсов.
Alexander Korzhov18 уровень, Минск
21 июля, 10:07
Хорошее замечание, спасибо) да и банально меньше писать придётся, если так сделать)
Roman Kiselev16 уровень, Пермь
22 июля, 19:17
А я вообще в отдельный метод преобразование выкинул и уже через него проверял. По типу If(myMethod(str) > 0 && myMethod(str) < 128) где myMethod - это собственно метод с возвращаемым нужным значением, а str - собственно ридер. По большей части долго думал над последним условием как только не выёживался вылетает NumberFormatException и всё. Пришлось смотреть. Спасибо за наводку.
Евгений Хайретдинов15 уровень, Нефтекамск
25 июля, 12:56
Невероятно изящно и просто! Спасибо!
Fischerski16 уровень, Москва
7 июля, 09:50
То ли я туплю, то ли в условии авторы накосячили, в любом случае мимо такого не захотелось проходить. В задании интервал значений для short указан как 0 < short < 128, хотя специально посмотрел несколько источников, везде для java тип short имеет диапазон значений от -32768 до 32767. Как так? Может перепутали с byte? Хотя byte от -128 до 127. Либо может я чего не понимаю, подскажите пожалуйста.
Dator23 уровень, Киев
5 июля, 20:31
Дурня та еще. Цивилизованно без try/catch - тяжело, думаю за день с гуглом разобраться можно.
Уася23 уровень, Замусральск
4 июля, 23:04
Снова помогли коментарии. Проверку на short нужно делать через Integer.parseInt, иначе валидатор не пропустит, хоть всё и будет работать. В остальном простая задача.
Andrew Grini (AG)16 уровень, Кишинев
3 июля, 19:35
если не знаете с чего начать, рекомендую ознакомиться со следующей информацией
Andrew Grini (AG)16 уровень, Кишинев
3 июля, 19:35
хороша задача, закрепил материал
Евгений19 уровень, Екатеринбург
26 июня, 11:02
Может кому поможет - сделал 1 переменную чекающую переводится ли значение в Double или Int. Соответственно если в каком то блоке try из вбитого в консоль значения мы успешно без ошибок получаем Double или Int, то меняем для чека значение. соответственно в конце проверяем по чеку надо ли вызывать print(String)....