我得到了以下代码,但在第一次循环之后,我的调试器发出以下错误,很奇怪,我一直这样做,但它不再起作用,这很奇怪?! 我一步一步地检查了它,它只是在切换顺序后停止了吗?
Exception in thread "main" java.lang.IllegalStateException: Scanner closed
at java.util.Scanner.ensureOpen(Unknown Source)
at java.util.Scanner.findWithinHorizon(Unknown Source)
at java.util.Scanner.nextLine(Unknown Source)
at Level.schleife(Level.java:35)
at Crawler.main(Crawler.java:23)
public boolean schleife() {
System.out.println("Das Spiel beginnt, bewege Dich mit der WASD Steuerung!");
Scanner eingabeMove = new Scanner(System.in);
tmpi = positioni;
tmpj = positionj;
while (true) {
String bewegung = eingabeMove.nextLine();
switch (bewegung) {
case "w": { // vorwärts
tmpi += 1;
if (actionResult()) {
positioni = tmpi;
break;
} else {
return false;
}
}
case "a": { // links
tmpj -= 1;
if (actionResult()) {
positionj = tmpj;
break;
} else {
return false;
}
}
case "s": { // rückwärts
tmpi -= 1;
if (actionResult()) {
positioni = tmpi;
break;
} else {
return false;
}
}
case "d": { // rechts
tmpj += 1;
if (actionResult()) {
positionj = tmpj;
break;
} else {
return false;
}
}
default: { // falsche Eingabe
System.out.println("Falsche Eingabe!");
continue;
}
}
eingabeMove.close();
}
}
答案 0 :(得分:1)
请勿在{{1}}循环结束时调用eingabeMove.close();
。您导致扫描仪在第一个循环结束时无法运行。
由于循环始终以while
结尾,因此使用此return
方法关闭扫描程序没有意义。
你实际上不需要关闭扫描仪,因为它包装schleife()
,它永远不会关闭。鉴于这一事实,当System.in
返回时,您只需让eingabeMove
超出范围。
如果您确实要关闭扫描程序,则应将schleife()
作为参数传递给方法,然后将其从调用方法中关闭。
eingabeMove
致电代码:
public boolean schleife(Scanner eingabeMove) {
// use the scanner
}