如果程序不等待输入,如何使用扫描仪修复“找不到行”异常

时间:2019-05-03 09:01:48

标签: java java.util.scanner

完全公开,我是java的新手,但找不到适合我问题的修复程序。

我正在上课时进行文字冒险,我只是想尝试使用java.util.Scanner从用户那里获取输入,它可以在相同类的单独方法中完美地工作,同时使用几乎完全相同的代码

我不断收到异常:

  

java.util.NoSuchElementException:找不到行

这似乎是因为程序没有在等待用户输入。

我尝试添加一条if else语句,以检查程序在程序应为其内容设置字符串类型变量且其始终为空时是否在扫描程序中输入了任何内容。

问题代码:

System.out.println("In which direction would you like to move?");
Scanner reader = new Scanner(System.in);
String sDirection = reader.nextLine(); //This line specifically.
reader.close();

但是此代码可以正常工作:

System.out.println("Do you accept this quest?(y/n)");
Scanner reader = new Scanner(System.in);
String sTemp = reader.nextLine();
reader.close();
char answer = sTemp.charAt(0);
return answer;

在问题代码中,扫描程序应记录用户的输入(北,南,东或西),然后将sDirection设置为该字符串并在if else语句中使用。但是,程序会在用户有机会输入任何内容之前返回“找不到行”异常。

2 个答案:

答案 0 :(得分:1)

停止关闭扫描仪。当您执行此操作时,它将关闭基础流,因此无法进一步阅读。

从所有代码中删除reader.close();

此外,您应该只创建一次Scanner并将其传递给需要它的方法。

答案 1 :(得分:0)

从您的代码中删除reader.close();

如果您要关闭扫描仪对象,它将可以工作,您可以在主要方法结束处关闭,只有在那里可以关闭它。 而且您应该只创建一次Scanner,然后在需要时调用它。!