我在执行程序时遇到错误。
我执行我的程序并将数据输入到输入文件中。
输入文件的内容
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
}
}
}
答案 0 :(得分:1)
您应该检查是否有更多输入。您可以在堆栈跟踪中看到nextInt
涉及到,如果您查看SDK,您会看到在
输入是exausted。
无论如何你的问题在这里:
int numOfInput = sc.nextInt();
所以在要求之前请确保您有有效的输入:
if (sc.hasNextInt()) {
.
.
.
}
答案 1 :(得分:0)
如果您通过输入文件发送数据,则必须在file
构造函数中提供Scanner()
。
您目前所做的工作是System.in
。
编辑:
此外,您只需在文件上打开一次扫描仪并在整个过程中使用它。在这种情况下,
1)您正在打开扫描仪并阅读第一行。
2)然后在doLimit函数中,再次打开扫描仪并读取输入文件的第一行,这不是整数。
因此,错误。
答案 2 :(得分:0)
扫描程序的默认分隔符是空格。但是,您计划将新行作为分隔符的前两行用作输入,然后使用空行和新行作为输入。也许这就是问题所在。尝试将所有内容写在一行,空格分隔。