if(numberOfOperation == 1) {

            System.out.println("Введите значения: ");
            Scanner scan = new Scanner(System.in);
            if (scan.hasNextInt()) {
                int a = scan.nextInt();
                int b = scan.nextInt();
                System.out.println(calculator.Add(a, b));
            } else if (scan.hasNextDouble()) {
                double a = scan.nextDouble();
                double b = scan.nextDouble();
                System.out.println(calculator.Add(a, b));
            } else if (scan.hasNextLong()) {
                long a = scan.nextLong();
                long b = scan.nextLong();
                System.out.println(calculator.Add(a, b));
            } else {
                System.out.println(" Ошибка ввода");

            }
            scan.close();
        }
Пишу простейший калькулятор. В классе Calculator есть четыре метода( сложение, вычитание, умножение и деление), все они перегружены на три примитивных типа(integer, double, long). В другом классе запускается метод main, создается объект класса Calculator, а с помощью BufferedReader считывается целочисленное значение от 1 до 4, которое является кодом операции. В примере прикрепил код для сложения. Суть проблемы. Исходный код класса main вообще не отрабатывает ввод чисел, сразу завершается. Если тестить каждую операцию по отдельности, то виден такой момент, нормально работает для int и double, а вот для long не пашет. Я знаю как работает Scanner в общих чертах( на вход подаются токены, которые по умолчанию разбиваться пробелами на отдельные части, которые потом можно проверить с помощью hasNext(type)() и спарсить в нужный тип), но как явно указать, что я подаю на вход long, если автоматом в Java целочисленные значения идут в int ? (Пробовал указать суффикс L на конце, но один фиг не работает)