使用do while循环时的NoSuchElementException

时间:2013-01-26 20:28:15

标签: java algorithm exception

我正在研究我的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:我还应该提到选择是从用户那里取一行而不是文件。

2 个答案:

答案 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。