Считать ключ ввода недействительным при проверке сканера - PullRequest
0 голосов
/ 30 января 2019

У меня есть этот код ...

import java.util.*;

public class SwitchExample {

    public static void main(String[] args) {
        System.out.print("Enter ID: ");
        Scanner scanner = new Scanner(System.in);
        while (!scanner.hasNextInt()) {
            System.out.print("Invalid. Enter again: ");
            scanner.next();
        }

        int number = scanner.nextInt();

        System.out.println("Your number was: " + number);
        System.out.println("Test message got printed!");
    }

}

Ввод правильного ввода - это нормально, а после ввода недопустимого символа он все равно работает как требуется.Однако при вводе клавиши ввода ни в том, ни в другом случае ошибка не возникает.Пожалуйста, помогите, как мне этого добиться.Я пробовал несколько способов, но ни один не помог.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Для ввода вам нужно добавить специальный случай, что-то вроде этого

String line = scanner.nextLine();
if (line .isEmpty()) {
        System.out.println("Enter Key pressed");
}

Вот полный исходный код для вашей потребности:

public static void main(String[] args) {
    System.out.print("Enter ID: ");
    Scanner scanner = new Scanner(System.in);
    String readString = scanner.nextLine();
    while(readString!=null) {
        System.out.println(readString);

        if (readString.isEmpty()) {
            System.out.println("Read Enter Key.");
        }
        else if (isInteger(readString)) {
            System.out.println("Read integer");
        }
        else{
            System.out.println("Read char");
        }

        if (scanner.hasNextLine()) {
            readString = scanner.nextLine();
        } else {
            readString = null;
        }
    }
}

public static boolean isInteger(String s) {
    Scanner sc = new Scanner(s.trim());
    if(!sc.hasNextInt()) return false;
    // we know it starts with a valid int, now make sure
    // there's nothing left!
    sc.nextInt();
    return !sc.hasNext();
}
0 голосов
/ 30 января 2019

Ну, вы просто сканируете целые числа, попробуйте alto сканировать "Следующая строка"

while(scanner.hasNextLine()) 

, которая будет ловить, если вы нажмете Enter, я предполагаю, что так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...