BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String wtf = "";
//private int count
while (true) {
try {
String enter = reader.readLine();
wtf = enter;
if (wtf.equals("exit")) {
break;
}
if (wtf.contains(".")) {
Double a = Double.parseDouble(enter);
print(a);
}
if (Short.parseShort(wtf) > 0 && Short.parseShort(wtf) < 128) {
short a = Short.parseShort(wtf);
print(a);
}
if (Integer.parseInt(wtf) <= 0 || Integer.parseInt(wtf)>=128) {
int a = Integer.parseInt(wtf);
print(a);
}
}
catch (Exception e) {
print(wtf);
}
Роман
31 уровень
Почему 33000 становиться типом String? Я понять все не могу
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
21 августа 2019, 23:48решение
Ну давай подумаем вместе.
В каком случае в твоем коде вызывается метод print(String)?
Только когда вылетает исключение.
Так кстати писать нельзя "если я получу по лицу, купить батон". В блоке catch не должно быть логики программы, он для обработки исключительных ситуаций - печати стектрейса, бросания исключений и тд. Но да ладно уж.
Итак мы выяснили, что 33000 становится строкой, когда выбрасывается исключение.
Внимание вопрос, где оно выбрасывается и второй вопрос, что происходит, после возникновения исключения и отработки блока catch...
+2
Роман Java Developer в Luxoft
21 августа 2019, 23:57
А почему 33000 строка, а не число?
0
Роман Java Developer в Luxoft
21 августа 2019, 23:58
Когда ввожу 22000 то это Integer, а тут иначе
0
Роман Java Developer в Luxoft
21 августа 2019, 23:59
А вот про catch не знал, но других идей у меня нет :(
0
Роман Java Developer в Luxoft
22 августа 2019, 00:03
Проверил в дебагере на Short!
0
Роман Java Developer в Luxoft
22 августа 2019, 00:04решение
ВСЕ!!! Огромное спасибо!!! А вот насчет catch это как фильтрация же? не?
+2
Justinian Judge в Mega City One Master
22 августа 2019, 00:20решение
:) Short не так часто используемый тип, немудрено забыть его диапазон.
Catch не фильтрация.
Представь что это аварийный выход в доме. Или по другому. Кетч это вызов аварийной бригады с сеткой, которые ловят тех, кто прыгает с пожара.
У тебя есть 5 человек, пусть будет семья. 4 человека просто выходят на улицу через двери. А для бабушки ты написал так, что в магазин она выйдет исключительно если приедет пожарная бригада , натянет сетку и будет ловить ее с окна.
Нету пожара - бабка в магазин не выйдет :)
Просто запомни это правило, блок catch для исключительных ситуаций, нежелательных.
Вызов метода принт(стринг) не относится к нежелательным ситуациям это просто часть функционала программы. А значит вызову этого метода в блоке кетч - не место.
А если нужно будет расширить функционал, чтобы там вызвать метод по-особенному, добавить функционал. А он у тебя работает на ошибках, и как видим которые еще плавающие, поменял строки местами, по одному работает, поменял по другому. Это неочевидность, это всякими способами стараются избегать.
Есть отдельно логика программы, и отдельно что мы делаем когда все идет в татры )
+2
Роман Java Developer в Luxoft
22 августа 2019, 01:02
Лучшее объяснение!!! Спасибо!! Я аж в заметках сохранил! Бабушка XD
+1
Роман Java Developer в Luxoft
21 августа 2019, 23:30
Больше же значение 128
0