线程主java.util.no中的JAVA异常这样的元素

时间:2013-01-23 12:30:54

标签: java exception

我在执行程序时遇到错误。

我执行我的程序并将数据输入到输入文件中。

输入文件的内容

LIMIT
2
ADD 30 60
MUL -60 60

我收到了如下异常错误。

Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Scanner.java:907)
        at java.util.Scanner.next(Scanner.java:1530)
        at java.util.Scanner.nextInt(Scanner.java:2160)
        at java.util.Scanner.nextInt(Scanner.java:2119)
        at Test.doLimit(Test.java:41)
        at Test.checkResult(Test.java:24)
        at Test.main(Test.java:15)

我用Google搜索,我相信String input = sc.next(); for循环内部应该导致错误。 我可以知道如何解决这个错误吗?

我的代码如下所示。

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();
    checkResult(input);
}


public static void checkResult(String input)
{
    if(input.equals("LIMIT"))
    {
        //do stuff
        doLimit();
    }
    else if(input.equals("SENT"))
    {
        //do stuff

    }
    else
    {
        //do stuff

    }
}
public static void doLimit()
{
    Scanner sc = new Scanner(System.in);
    int numOfInput = sc.nextInt();
    int x,y;
    for(int i = 0; i < numOfInput; i++)
    {
        String input = sc.next();
        x = sc.nextInt();
        y = sc.nextInt();

        if(input.equals("ADD"))
        {
            //add

        }
        else if(input.equals("SUB"))
        {
            //sub

        }
        else
        {
            //multiple

        }
    }
}

3 个答案:

答案 0 :(得分:1)

您应该检查是否有更多输入。您可以在堆栈跟踪中看到nextInt涉及到,如果您查看SDK,您会看到在

时抛出此异常
  

输入是exausted。

无论如何你的问题在这里:

int numOfInput = sc.nextInt();

所以在要求之前请确保您有有效的输入:

if (sc.hasNextInt()) {
  .
  .
  .
}

答案 1 :(得分:0)

如果您通过输入文件发送数据,则必须在file构造函数中提供Scanner()

您目前所做的工作是System.in

编辑:

此外,您只需在文件上打开一次扫描仪并在整个过程中使用它。在这种情况下,

1)您正在打开扫描仪并阅读第一行。

2)然后在doLimit函数中,再次打开扫描仪并读取输入文件的第一行,这不是整数。

因此,错误。

答案 2 :(得分:0)

扫描程序的默认分隔符是空格。但是,您计划将新行作为分隔符的前两行用作输入,然后使用空行和新行作为输入。也许这就是问题所在。尝试将所有内容写在一行,空格分隔。