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

  • 8
  • Недоступна
Итак, полиморфизм. Вы о нём ещё не забыли? Тогда решаем следующую задачку: считываем с консоли данные, пока не будет введено слово "exit". Для каждого значения, кроме "exit", вызываем метод print, какой именно принт — зависит от значения. Например, если значение содержит точку, то вызываем print для Double, а если это число от 0 до 128 — то для short.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (248)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Timur Chestnykh19 уровень, Харьков
13 часов назад
Мой вариант решения (в комменты ещё не заглядывал)
while (true) {
            int i = 0;  String s = reader.readLine();
            if ("exit".equals(s)) break;

            if (s.contains(".")) {
                try { print(Double.parseDouble(s)); }
                    catch (Exception e) { print(s); }
                continue;
            }

            try {  i = Integer.parseInt(s); }
                catch (Exception e) { print(s); continue; }

            if (i > 0 && i < 128) print((short)i);
            else print(i);
        }
Alex16 уровень
пятница, 19:31
Holy shit, I've spent 4 hours and finally done on the first try... But for it I should been read about regular expressions, and the different apache libraries... I checked the Double just via: if (s.contains("."))
Влад16 уровень, Калуга
3 декабря, 20:24
Вообще делается просто, считываем строку пока не будет введено "exit", как обычно через while (true), а дальше в else ставим try, catch. В try засовываем наши if-ы с парсером чисел, а если ловим NumberFormatException то выводим String. А если ещё проще, то ребята ниже показали пример с регулярными выражениями.
Alexey Gumen16 уровень, Maiskiy
3 декабря, 17:15
если вы такой же как я, НЕ проверяйте точку методом (n%1>0) валидатор этого не понимает.
Konstantin Kulinich17 уровень, Киев
3 декабря, 14:12
Поставил try/catch на Double и String и валидатор одобрил с первой попытки.
Sekator20 уровень, Староконстантинов
29 ноября, 12:22
кто эту придумал пускай дальше пишет норм !
Кирилл16 уровень, Екатеринбург
28 ноября, 02:30
Война с валидатором... 😬
Игорь Кучер20 уровень, Днепр
25 ноября, 11:39
В чём прикол, что если парсить и шорт, и Интежер, то 30000 - это Стринг? Бреееед 25 попыток из-за этого нюанса. Совет: приводите Интежер к шорту, а не парсите из отдельно
Den_lx22 уровень, Гродно
21 ноября, 23:26
решается в 7-8 строк через один try\catch без finally. первые три условия, которые должны пробовать превращать строку в число, пишете в блоке try, а если словили NumberFormatException то значит выводите на экран как строку. Вы решили задачу лучше, чем 60% учеников. Вам удалось ее решить с 1 попытки. Среднее количество попыток для этой задачи 3.12. Всего эту задачу решили 19808 учеников. Желаю и вам того же, надеюсь помог :)
Jotaro18 уровень, Киев
20 ноября, 22:36
public static boolean isNumeric(String str){ return str.matches("-?\\d+(\\.\\d+)?"); } Проверка на "А номер ли это?" Надеюсь, что будущему поколению поможет. З.Ы: учите регулярные выражения ;D
Amedomaro18 уровень, Санкт-Петербург
30 ноября, 19:12
Эм, а не проще ли вместо того чтобы писать метод... просто написать условие проверки на то что в строке присутствуют любые символы кроме цифр :
if (str.matches("\\D+"))
И начинать с неё?
Rufat Khafizov22 уровень, Томск
3 декабря, 05:10
я только начал учить регулярные выражения, скажите, вы экранировали \D (любые символы кроме цифр) и проверяете от одного до нескольких (+) таких символов? А метод matches, позволяет использовать регулярные выражения в java?