我正在研究我的College项目,当我尝试将所有代码循环时,我不断收到此异常。当它不在一个循环中它完全正常,它包括创建文本文件和附加文本文件(如果这有任何帮助)。我的假设是我的扫描仪导致了这些问题,但我不知道问题是什么或如何修复它。
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:855)
at java.util.Scanner.next(Scanner.java:1478)
at java.util.Scanner.nextInt(Scanner.java:2108)
at java.util.Scanner.nextInt(Scanner.java:2067)
at PDispenser_V1.main(PDispenser_V1.java:51)
我无法发布我的代码,因为抄袭软件检查stackoverflow,如果我这样做,我的整个项目将被抄袭。我知道这是一个巨大的垮台,但如果你能告诉我一般要找什么以及如何解决它(如果我给你足够的话,那就太棒了!)编译器给我的唯一行号是51,它上面有代码。
selection = input.nextInt();
这一行之后是一个switch语句,每种情况下都有一堆方法。如果有什么我可以回答而不显示任何代码请问。任何帮助表示赞赏。
编辑:我也应该说,它符合要求,但当我再次选择其中一个选项时,它会抛出异常。
EDIT2:我还应该提到选择是从用户那里取一行而不是文件。
答案 0 :(得分:1)
您可能正在使用nextInt,而不检查流上是否有可读取的内容,正如javadoc for nextInt所说:
抛出:
NoSuchElementException - 如果输入已用尽
在尝试从流中读取一个之前,尝试使用hasNextInt()检查是否存在int。
答案 1 :(得分:0)
异常抛出是因为token
没有下一个input
返回。
要避免此类exceptions
,最好首先使用token
检查下一个input.hasNextInt()
是否存在。如果返回true,则使用input.nextInt()
提取下一个标记。实施例。
if (input.hasNextInt())
{
int i = input.nextInt();
}
修改强>
可以通过以下方式生成此错误:
public class Scanned
{
public static void main(String st[])
{
Scanner input = null;
try
{
InputStream in = System.in;
input = new Scanner (in);
while (true)
{
System.out.println(input.nextInt());
in.close();
}
}
catch (Exception ex)
{
System.out.println(ex);
}
}
}
确保在循环中没有关闭InputStream。