public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String s;
Double d;
short sh;
Integer i;
while (!(s = r.readLine()).equals("exit")){
try {
if (s.contains(".")) {
d = Double.parseDouble(s);
print(d);}
else if (Short.parseShort(s)>0 && Short.parseShort(s)< 128){
sh= Short.parseShort(s);
print(sh);}
else if (Integer.parseInt(s)<=0 || Integer.parseInt(s)>= 128){
i= Integer.parseInt(s);
print(i);}
}
catch (NumberFormatException e){
print (s);
}
}
}
public static void print(Double value) {
System.out.println("Это тип Double, значение " + value);
}
public static void print(String value) {
System.out.println("Это тип String, значение " + value);
}
public static void print(short value) {
System.out.println("Это тип short, значение " + value);
}
public static void print(Integer value) {
System.out.println("Это тип Integer, значение " + value);
}
}
Подскажите, почему если сначала в проверке стоить Short, то Integer будет не верно проходить проверку?
Ведь если при проверке Short проверка выдала false, начинается проверка следующего else - if, а там должно быть true.
Или "s" преобразовывается в Short, при проверке выдает false, и далее уже проверяется некорректное число (не то которое было введено)?Елена
20 уровень
Помогите разобраться
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
JustinianJudge в Mega City OneMaster
14 октября 2019, 04:45
При оформлении вопроса, слева внизу есть галочка прикрепить код. Так и код и условия прикрепляются.
Либо можешь просто код сбрасывать, но код в вопросах всегда предоставляй полностью, сэкономишь и свое и чужое время.
По этому обрывку лично я ничего не заметил, на каком значении у тебя интеджер не проходит проверку?
0
Елена
14 октября 2019, 04:55
Программа запрещает размещать код задачи, которая прошла проверку.
Хорошо, размещу вариант, который не прошел
0
Елена
14 октября 2019, 04:57
готово.
Проверку не проходит при значении 33000
0
JustinianJudge в Mega City OneMaster
14 октября 2019, 05:05
а, вспомнил, был уже такой вопрос, про 33000 :)
шорт это примитив. Какие у него границы - диапазон значений?
0
Елена
14 октября 2019, 05:11
от -32768 до 32767, с Short то понятно, но почему Integer при 33000 тоже выдает false?
0
JustinianJudge в Mega City OneMaster
14 октября 2019, 05:16
а что будет если запарсить к примеру Integer.parseInt("33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3333333333333333333333333333333333333333");
или Short.parseShort("100_000");?
По твоей логике, если мы попытаемся запарсить 1 000 0000 в шорт, метод ПарсШорт вернет нам примитив типа шорт с значением 1 000 000, и поскольку это не пройдет проверку, то тогда уже должно выполнится условие следующей проверки.
Но проблема в том, что примитив типа шорт, не может никак содержать значения вне своег диапазона, 33 000, 1 000 000 и тд.
А значит в момент парсинга, метод не может вернуть примитивное значение типа шорт, а значит кое что произойдет, ведь код обещает что выполнит проверку, а выполнить не сможет.
Понимаешь к чему я?
Проверки на интеджер просто не будет в принципе.
+2
Елена
14 октября 2019, 05:20
ааа... Все поняла))) Спасибо большое!!!
0