我正在执行以下代码,以使用scanner对象从输入流中读取字符串。
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成功没有任何问题。但是他第二次调用引发了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)
答案 0 :(得分:0)
代码有两个问题
假设已经有输入。在您调用while(!scanner.hasNext()){}
的位置之前的简单scanner.next();
应该有效。
您正在创建多个扫描程序(这可能会影响代码,也可能不会影响代码,但会影响效率)
相反,Scanner scanner = new Scanner(System.in);
可以分解为方法外的声明(Scanner scanner;
),然后在主方法或初始化代码中定义(scanner = new Scanner(System.in);
)。