1

执行程序时遇到错误。

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

输入文件的内容

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)

我用谷歌搜索,我相信 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

        }
    }
}
4

3 回答 3

1

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

输入已耗尽。

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

int numOfInput = sc.nextInt();

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

if (sc.hasNextInt()) {
  .
  .
  .
}
于 2013-01-23T12:34:57.600 回答
0

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

提供了您当前所做的System.in

编辑 :

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

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

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

因此,错误。

于 2013-01-23T12:35:07.680 回答
0

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

于 2013-01-23T12:37:08.487 回答