我必须实现接口(interface)终端,它有两种方法。第一种方法只是一个简单的输出,它工作正常。第二种方法的目标是通过控制台读取用户的输入并返回一个拆分(空白)数组。
public class GameTerminal implements Terminal {
@Override
//output method
@Override
public String[] readInput() {
Scanner scn = new Scanner(System.in);
String input = scn.nextLine();
return input.trim().split("\\s+");
}
}
此代码引发异常:Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at student.GameTerminal.readInput(GameTerminal.java:20)
...
我尝试使用 scn.next()、scn.hasNext()、scn.hasNextLine() 和 BufferedReader 来解决问题,但没有任何效果。我没有第二个扫描仪,也没有使用 scn.close()。代码在 IntelliJ 中使用 gradle 运行。
有人有解决方案或想法吗?谢谢!
最佳答案
我认为您所要做的就是在调用之间使用相同的 Scanner 来保留状态:
public class GameTerminal implements Terminal {
private Scanner scn = new Scanner(System.in);
...
public String[] readInput() {
String input = scn.nextLine();
return input.trim().split("\\s+");
}
}
一个简单的驱动程序:public class Example {
public static void main(String[] args) throws Exception {
GameTerminal terminal = new GameTerminal();
String[] tokens = null;
while ((tokens = terminal.readInput()) != null) {
System.out.println(Arrays.toString(tokens));
}
}
}
测试运行:$(/usr/libexec/java_home -v 11)/bin/java Example.java
some tokens
[some, tokens]
some more tokens
[some, more, tokens]
关于java - 如何从控制台读取字符串? NoSuchElementException : No line found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63283226/