public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String s = reader.readLine();
if (s.equals("exit"))
break;
else {
try {
if (s.contains(".")) print(Double.parseDouble(s));
else if (Short.parseShort(s) > 0 && Short.parseShort(s) < 128) print(Short.parseShort(s));
else if (Integer.parseInt(s) <= 0 || Integer.parseInt(s) >= 128) print(Integer.parseInt(s));
else print (s);
} catch (Exception e) {
print(s);
}
}
}
}
Если взять число -1, то по условиям задачи оно должно вызвать метод для Integer.
В idea всё нормально при таком порядке строк:
1.1
Это тип Double, значение 1.1
100
Это тип short, значение 100
-1
Это тип Integer, значение -1
test
Это тип String, значение test
exit
Дмитрий
23 уровень
При парсинге в else if (Short.parseShort(key) > 0 && Short.parseShort(key) < 128) как может быть (Short.parseShort(key) > 0 если key =-1???
Обсуждается
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
IceBergMaster
19 июля 2019, 15:40
"как может быть (Short.parseShort(key) > 0 если key =-1???"
Никак, почему вообще возник этот вопрос?
0
Дмитрий
19 июля 2019, 22:36
- 1 попадало в short
Пока не поменяешь местами строки валидатор не пропускает.
0
IceBergMaster
19 июля 2019, 22:44
Да не могло "-1" чисто физически и логически, согласно твоего кода, попадать в short, а вот с граничными значениями выше значений класса Short твоя программа не работала, вот валидатор и жаловался.
+1
Дмитрий
20 июля 2019, 13:28
Больше нуля, но меньше 128, то вызвать метод print для short;
Всё в else if. Ну граничные значения потом проверяются, в следующем else if. Что не так?
0
IceBergMaster
20 июля 2019, 13:39
Какой будет результат?
0
Дмитрий
20 июля 2019, 13:49
Не влезает в short.
0
IceBergMaster
20 июля 2019, 13:52
Значит будет выведено String, а должно Integer
0
Дмитрий
20 июля 2019, 13:55
А почему он не зайдет в следующий if else?
Там как раз Integer.
0
IceBergMaster
20 июля 2019, 13:58
Ты же сам написал, что не влезает в short, значит что в таких случаях происходит?
0
Дмитрий
20 июля 2019, 14:00
Я думал проходится по всем веткам else if, как на блоксхеме.
0
IceBergMaster
20 июля 2019, 14:14
Нет, происходит NumberFormatException
0
Дмитрий
20 июля 2019, 14:32
Спасибо за объяснение. Но это тоже - так себе.
В условиях не написано про диапазоны данных, которые будут вводиться.
Я могу ввести 2147483648 и тогда тоже будет String, даже если первой строкой идёт Integer.
0
IceBergMaster
20 июля 2019, 14:44
В условии говориться о типах данных которые будут вводится - Double, Integer, Short и String, так как Long в рамках задачи не рассматривается, а значение 2147483648 чисто физически не может быть преобразовано в Integer, значит попадет в String, всё верно.
0