Метод hasNextInt()

хотел бы узнать, как работает метод hasNextInput() в Java. У меня есть следующий код:

package com;

import java.util.Scanner;

public class first {
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Вы попали на необитаемый остров, ваши действия?"
                + "\n1) Буду думать как выбраться"
                + "\n2) Буду плакоть :(");
        System.out.println("Введите число: ");
        if (scan.hasNextInt()) {
            
            int a = scan.nextInt();
            if (a == 1) {
                System.out.println("Вы молодец!");
            } else if (a == 2) {
                System.out.println("НУ поплакал и умер:(");
            }
        }
        else {
            System.out.println("Ошибка");
        }
        
    }
    
}

Правильно ли я думаю, что где бы пользователь не ввел текст, вместо целых чисел (внутри if (scan.hasNextInt())), метод остановит выполнение кода и выведет ошибку? Или как он вообще работает?


Ответы (1 шт):

Автор решения: gil9red

Сканер работает с токенами. Токен это последовательность символов, разделенная по-умолчанию whitespace (это пробелы, табуляция, символами перевода строки)

Метод hasNextInt проверяет, что следующая последовательность символов является int-ом и в этом случае возвращает true, иначе false.

Метод nextInt пытается следующая последовательность символов как считать как int и если успешно, то возвращает его, иначе выбрасывает исключение InputMismatchException

Пример:

Scanner s1 = new Scanner("\n1 abc");
System.out.println("hasNextInt: " + s1.hasNextInt());  // true
System.out.println("nextInt: " + s1.nextInt());        // 1
System.out.println("hasNextInt: " + s1.hasNextInt());  // false
System.out.println("nextInt: " + s1.nextInt());        // InputMismatchException
→ Ссылка