Собственно, хотелось бы обсудить некоторые загадочные для меня вещи в этом задании. Повозившись в пустую с бафером, решил для интереса сделать через сканер.
На удивление все скомпилировалось без исключений, правда выход оказался странным:
Output Input
Это тип String, значение 1.1 1.1
Это тип short, значение 100 100
Это тип Double, значение -1.0 -1
Это тип String, значение test
Это тип String, значение test exit
Во-первых, откуда взялась пустая строка? Во-вторых, почему 1.1 стало String? В-третьих, просматривая "правильное решение" я обнаружил, что вызов метода print для строки осуществляется в блоке catch. Почему? И как до такого можно вообще додуматься?
catch (Exception e) {
print(s);
}
package com.javarush.task.task15.task1519;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
/*
Разные методы для разных типов
*/
public class Solution {
public static void main(String[] args) throws IOException {
Scanner scn=new Scanner(System.in);
String key;
int num;
double dbn;
while(scn.hasNext()) {
if(scn.hasNextLine()) {
key=scn.nextLine();
if(key.equals("exit")) break;
else print(key);
} if(scn.hasNextInt()) {
num=scn.nextInt();
if(num>0&&num<128)
print((short) num);
else print(num);
} if(scn.hasNextDouble()) {
dbn=scn.nextDouble();
print(dbn);
}
}
}
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);
}
}