Я выполняю приведенный ниже код, чтобы прочитать строку из входного потока с помощью объекта сканера.Scanner -NoSuchElementException
public class Test{
public static void main(String[] args) {
String userInput1 = getUserInput();
System.out.println(userInput1);
String userInput2 = getUserInput();
System.out.println(userInput2);
}
private static String getUserInput() {
System.out.println("Enter the String");
Scanner scanner = new java.util.Scanner(System.in);
String input = scanner.next();
scanner.close();
return input;
}
}
Первый вызов к методу getUserInput удалось без issues.But он второй инвольтация бросил NoSuchElementException.
Enter the String
test1
test1
Enter the String
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
Вызов 'hasNext' и' next' на 'System.in' имеет тот же эффект: эти вызовы блокируют поток до тех пор, пока не будет прочитан токен. Поэтому нет смысла использовать этот цикл while. – Tom
@Tom Но вы можете использовать его для проверки типа ввода («введите номер», когда кто-то набирает строку) –
Итак, somthing like 'System.out.print (« введите число: »); в то время как (! scanner.hasNextInt()) {} '? Это плохая идея для проверки типов. Вы можете попробовать, чтобы узнать, почему. – Tom