Зачем методу scanner.hasNextInt () письмо для начала обработки чисел? - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь получить некоторые целочисленные входные данные от пользователя с помощью метода scanner.hasNextInt ().Это работает просто отлично, но мне нужно набрать букву, чтобы программа знала, что я закончил вводить целые числа, в то время как я хочу, чтобы консоль знала это после нажатия клавиши ввода после одной строки.

Например, я набираю (ввод 1 2 3 года), и программа работает нормально, но если я набираю (ввод 1 2 3), ничего не происходит, даже если я продолжаю нажимать клавишу ввода.Это связанная часть моего кода, если вам нужно взглянуть на него.

public class Main {
    static LinkedList linkedList =new LinkedList();

    public static void main(String [] args){
       System.out.println("enter integer numbers");
       Scanner scanner=new Scanner(System.in);
       while (scanner.hasNextInt()){
          linkedList.append(scanner.nextInt());
       }
       print();
    }
}

1 Ответ

0 голосов
/ 17 декабря 2018

Три шага, чтобы понять это.

  1. Scanner использует разделитель для разбиения ввода на токены, по умолчанию используется разделитель \p{javaWhitespace}+.Попробуйте

    Scanner scanner = new Scanner(System.in);
    System.out.println(scanner.delimiter());
    
  2. \p{javaWhitespace} эквивалентно java.lang.Character.isWhitespace(), поэтому \p{javaWhitespace}+ будет соответствовать нескольким символам, которые isWhitespace.

  3. Разрыв строки, вызванный клавишей enter, является пробелом.Когда вы вводите несколько enter с, они будут распознаваться как разделитель, а не как токен.

Вы можете использовать один пробел, поэтому потребуется второе enterв качестве токена:

scanner.useDelimiter("\\p{javaWhitespace}");
...