0

我正在从事我的大学项目,当我尝试使所有代码循环时,我不断收到此异常。当不在循环中时,它工作得很好,它包括创建文本文件和附加文本文件(如果有帮助的话)。我的假设是我的扫描仪导致了这些问题,但我不知道问题是什么或如何解决它。

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:我还应该提到,选择是从用户那里获取一行而不是一个文件。

4

2 回答 2

1

您可能正在使用 nextInt 而不检查流上是否有可读取的内容,正如nextInt 的 javadoc所说:

抛出:

NoSuchElementException - 如果输入已用尽

在尝试从流中读取一个 int 之前,尝试使用hasNextInt()检查是否有一个 int。

于 2013-01-26T20:36:34.197 回答
0

抛出异常是因为没有返回token的下一个。input

为了避免这种情况,最好先检查下一个usingexceptions的存在。如果它返回 true,则使用 提取下一个标记。例子。tokeninput.hasNextInt()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 在循环内没有关闭。

于 2013-01-26T20:39:33.157 回答