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

  • 8
  • Недоступна
Итак, полиморфизм. Вы о нём ещё не забыли? Тогда решаем следующую задачку: считываем с консоли данные, пока не будет введено слово "exit". Для каждого значения, кроме "exit", вызываем метод print, какой именно принт — зависит от значения. Например, если значение содержит точку, то вызываем print для Double, а если это число от 0 до 128 — то для short.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (121)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Иван19 уровень
19 октября, 15:27
Выполнил как посоветовал Petr Gorskin 1) ввод в цикл 2)Try{ пункты 3,4,5 } 3) проверка equals("."), если да то печать Parse(нужный_тип) 4)проверка на Integer.parseInt 5)проверка на Short.parseShort 6) catch(написать исключение) // которое словим при попытке запарсить строку в число 7) написать метод для печати print(s);
Марина18 уровень
12 октября, 15:41
Написала огромный код с if-ами, с try-ми, все работает... все замечательно... 2 раза не прошел валидатор! Полезла читать коммменты, говорят с большими числами не работает... и правда!!! говорит, что это стринг!
if (Integer.parseInt(line) <= 0 || Integer.parseInt(line) >= 128) {
    print(Integer.parseInt(line));
} else if (Short.parseShort(line) > 0 && Short.parseShort(line) < 128) {
    print(Short.parseShort(line));
}
В первую очередь была проверка на short, а потом на Integer: 1. большое число не подходило в short... то есть больше 128 2. но и проскакивало мимо блока с if, где проверка на Integer. Поменяла местами проверку и все прошло... не поняла, почему так... че к чему??? П.С.: дадада, можно было короче написать код.
gtfo16 уровень, Санкт-Петербург
8 ноября, 19:16
Возможно, не актуально. Как я понимаю, это из-за того, что строка парсится в Short.parseShort() для сравнения и тут вылетает NumberFormatException и переходит в блок catch. Т.е. до Integer просто не доходит. Если вводить числа в диапазоне short, то он определяет нормально в Integer, а все что больше уже в String.
Марина18 уровень
10 ноября, 18:53
Все равно спасибо :)))
Gogogo23 уровень
26 сентября, 17:16
Если всё работает, но не проходит валидацию, протестируйте: 10000000000 У меня из-за больших чисел с первого раза не прошло.
Николай Кравцов16 уровень, Гомель
25 октября, 21:28
int 32 бит от -2147483648 до 2147483647
Igor18 уровень, Киев
23 сентября, 10:11
Моя програма выводила строку exit тоже. Валидатор считал такую ошибку: Во всех остальных случаях должен быть вызван метод print(String value). Остановил цикл while с помощью break.
Элина Липец19 уровень, Уфа
10 октября, 11:09
То же самое... Не забудьте сделать доп условие, если exit , то ничего не выводить.
Petr Gorskin22 уровень, Москва
18 сентября, 21:45
Поделюсь логикой моего решения. 1) Загоняете в вечный цикл while считывание строки. 2) делаете блок try и проверяете поочередно строку на .contains("."), потом парсите строку в Integer 3) тут может возникнуть исключение NumberFormatException которое означает что строка содержит буквы 4) в блоке try продолжаете проверять результат парса на условия <,> и пр. 5) Если поймано исключение сравниваете строку с exit и если не равны выводите строку, если равны break; P.S. Вызов нужного print проводил с помощью обычного преобразования типов (+парс).
Aleksei22 уровень
2 октября, 22:07
Отличный вариант. Спасибо! Помогло, особенно с исключением.
12 сентября, 14:12
Сохранил вводимые данные из консоли в строку
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
temp = reader.readLine();
Объявил объект класса Scanner и в конструкторе на ввод указал ту самую строку
Scanner scanner = new Scanner(temp);
Проверяю наличие целых чисел в строке – всё работает
if (scanner.hasNextInt())
А когда проверяю на наличие дробных чисел, то вот это не работает
if (scanner.hasNextDouble())
Пока писал, понял что надо hasNext*что-то другое* писать, чтобы работало))) Пойду пробовать)
Вагиф19 уровень, Санкт-Петербург
10 сентября, 10:20
Задача хорошая, долго сидел и думал, решение не приходило, потом начал гуглить, но все равно не решил полностью, оставил на следующий день, и все получилось причем с первого раза (Вы решили задачу лучше, чем 58% учеников).
Александр32 уровень
10 сентября, 06:34
все ифы с преобразованиями строки в число завернул в try а в catch выводил строку, точка ищется просто через contains.
Александр Толкачёв22 уровень, Санкт-Петербург
31 августа, 20:14
Тяжко зашла. Пришлось решать через регулярные выражения. Оставляю подсказку: 1) Проверка на все знаковые целые числа
line.matches("-?\\d+")
2) Проверка на знаковые числа с точкой
line.matches("^-?\\d+\\.\\d+$")
Оба возвращают тип boolean.
Dmitry Shilov25 уровень, Москва
14 августа, 09:36
/* Комментарий удален */
Дмитрий18 уровень, Санкт-Петербург
25 августа, 16:51
Протестируй любое значение типа double.
Артём23 уровень, Минск
27 августа, 20:43
поробуй : else if