Не проходит по последнему пункту, вроде тестировал на всём что можно (даже с пустой строкой) - работает исправно вот код :
import java.io.*;

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

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        String a;
        Double ifDouble;
        Integer ifInteger = null;
        while(!"exit".equals((a = r.readLine()))) { //проверка на exit
        	if(a.contains(".")) {//проверка на наличие точки
        		try {
        			ifDouble = Double.parseDouble(a); //проверка можно ли парсить
        			print(ifDouble); //если да, печатаем дабл
        			continue;
        		} catch (NumberFormatException e){
        			print(a);// нет - печатаем стринг
        		}
        	}

        	try {
        		ifInteger = Integer.parseInt(a); // по аналогии с дабл проверяем инт
        		if(ifInteger > 0 && ifInteger < 128) {// проверка на шорт
        			int ifint = ifInteger;
        			print((short) ifint);
        		}
        		else {
            		print(ifInteger);
            	}
        	} catch (NumberFormatException e1) { // если нет - печатаем строку
        		print(a);
        	}

        }
    }

    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);
    }
}