如何从控制台读取字符串?NoSuchElementException:找不到行



我必须实现接口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]

最新更新