我必须实现接口Terminal,它有两个方法。第一个方法只是一个简单的输出,它运行良好。第二种方法的目标是通过控制台读取用户的输入,并返回一个拆分的(空白(数组。
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.hasNextRine((和BufferedReader来解决这个问题,但什么都不起作用。我没有第二台扫描仪,也不使用scn.close((.
该代码在IntelliJ中使用gradle运行。
有人有解决方案或想法吗?非常感谢。
我认为您所要做的就是在调用之间使用相同的扫描程序来保持状态:
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]