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

  • 16
  • Недоступна
Итак, полиморфизм. Вы о нём ещё не забыли? Тогда решаем следующую задачку: считываем с консоли данные, пока не будет введено слово "exit". Для каждого значения, кроме "exit", вызываем метод print, какой именно принт — зависит от значения. Например, если значение содержит точку, то вызываем print для Double, а если это число от 0 до 128 — то для short.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (494)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Samummm System Engineer
19 января, 14:18
Кто-нибудь может объяснить, ПОЧЕМУ мое решение НЕ ПРАВИЛЬНОЕ ???!!!!!!!!!!!!!!!!!!!!!!!! ПОЧЕМУ надо было решать именно через, ИСКЛЮЧЕНИЯ, где об этом написано хоть слово? Опять же СОВСЕМ НЕ ПОНЯТНО, зачем доводить до исключения, когда можно заранее его предотвратить? Что, так программа работает быстрее или что?????????
Samummm System Engineer
20 января, 07:38
Все РЕШИЛ!!! 100 ДНЕЙ КОДА!!! УРА!!! Можно решить без исключений. НО надо ПРАВИЛЬНО выполнить обработку ввода: двух точек, цифр и букв, минус и прочее. Но опять же НИГДЕ в условии не сказано, ЧТО надо обрабатывать. Вот например, выход за диапазон Integer обрабатывать не надо и Double тоже. Странно?! Может условие в задаче поправить, чтоб понимать что надо обрабатывать, а что нет. И совсем НЕ ПОНЯТНО, как правильнее писать код этой задачи, через Исключения или через Обработку неправильно введенных данных.
Anonymous #2942293
Уровень 26, Москва, Russian Federation
9 января, 10:42
кто-нибудь знает, почему всегда вызывается тип Integer?
number = buf.readLine();
Integer i = Integer.valueOf(number);
print((i <= 0 || i >= 128) ? i : Short.parseShort(number));
Алексей Software Developer в Базис
2 января, 20:35
Возник ли у кого вопрос почему при вводе большого числа , больше 10 знаков,то есть уже не int, в консоли пишется, что это тип String, а валидатор не пропускает по последнему пункту? Какой тип должен быть указан для этого случая?
Elidriel
Уровень 17, Воронеж
12 января, 10:27
long наверно
Сергей Коваленко
Уровень 32, Краснодар
13 января, 09:00
по логике задачи должен быть String. видимо, валидатор не пропускает не по этому случаю. больше ошибок может быть с Double
Иван Новиков
Уровень 19, Russian Federation
24 декабря 2021, 08:06
Сделал через регулярные выражения, "\\-?\\d+\\.\\d+" для double. Так интереснее чем через try/catch.
Sasha Dokuchaev Работает в Andersen
21 декабря 2021, 18:30
Не приняло через "name.mathes"
Sergei
Уровень 25, Tallinn, Эстония
21 декабря 2021, 23:27
Использовал .matches. Прошло нормально, хотя можно и без него. Главное в задаче - это try-catch. Без этого не примет. Что я только не пробовал...
Ян
Уровень 16, Москва
13 января, 07:52
У меня ни try-catch нет, ни регулярок. Всё как-то прошло с 1-ой попытки.
Сергей Коваленко
Уровень 32, Краснодар
21 декабря 2021, 13:09
не пойму где здесь можно было применить регулярки, для фильтра по точке я сделал просто
br.readLine.contains(".")
Ян
Уровень 16, Москва
13 января, 07:52
Во-во, не пойму зачем мудрить.
Dimka Poluektov
Уровень 28, Нижний Новгород, Россия
17 декабря 2021, 13:09
Как один из вариантов решения, можно использовать Регулярные выражения: docs.oracle Очень понятно regex объясняют на ютубчике: Регулярные выражения
Николай Гончарик
Уровень 34, Челябинск
5 декабря 2021, 04:49
Для тех у кого все условия пропускает, кроме проверки на Integer (особенно если вы проверяете через Integer.parseInt, возможно поможет
int x = Integer.parseInt(line); //Автоматически сужает тип, если подано значение за пределами Integer!!!
Сергей Коваленко
Уровень 32, Краснодар
21 декабря 2021, 13:21
так NumberFormatException кинет же, если за пределами значений будет. и он не сужает, он просто преобразовывает из String в Integer.
Дима
Уровень 16, Новая Каховка, Украина
4 декабря 2021, 15:21
Тому кто будет применять цикл while. Тут все сложные конструкции применяют, я сделал так. СОздал переменую boolean задал ей значение true. А в блоке где пользователь вводит exit закрываю поток и присваиваю значению boolean = false и всё, цикл больше не срабатывает)
Anonymous #2436575 Android Developer в AllPets
11 декабря 2021, 11:12
Можно еще проще - бесконечный цикл while (true) и if (s.equals("exit)) break; Это кстати наиболее распространенная конструкция
Дима
Уровень 16, Новая Каховка, Украина
11 декабря 2021, 17:24
тоже классный вариант)
Evgeniy
Уровень 17, Санкт-Петербург, Россия
3 января, 20:36
или if (!(a.equals(b)) и в конце цикла a = reader.readLine(); :)
VladimirPic Работает в Gazprom
4 декабря 2021, 09:00
Этот кайф, когда появляется какая никакая база знаний и начинаешь соображать, где её можно применить