Java Scanner错误:线程“main”中的异常java.util.NoSuchElementException:未找到任何行

时间:2013-09-10 17:57:24

标签: java

我正在尝试获取用户输入,但我一直收到错误:找不到行 行号引用“input = fileS.nextLine();”作为错误的来源

System.out.print("Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N \n");
             Scanner fileS = new Scanner(System.in);

             input = fileS.nextLine();
             input = input.trim();
             input = input.toLowerCase();

             tableCount ++;
             fileS.close();

这是我的代码,据我所知,如果我使用fileS.hasNextLine(),它将避免此错误 但 这会一起跳过用户输入。

我在这里缺少什么?

扫描仪处于公共功能

提前致谢!

4 个答案:

答案 0 :(得分:2)

您应该以这种方式阅读输入:

while(fileS.hasNextLine())
{
    //Your operations here
}

当你这样做时

  

fileS.nextLine();

它会尝试读取,如果没有找到行,它将抛出异常。还要寻找

  

fileS.close()

在阅读之前,在您的代码文件中

。如果在读取操作之前关闭它,则无法再次重新打开它,它将抛出异常。我认为这是最可能的原因,因为几个星期前我就有了它:P

答案 1 :(得分:1)

嗯,您应该几乎总是使用nextLine()而不是hasNextLine()。但是您正在跳过输入,因为System.in可能没有指向console或任何inputstream可以接受任何输入或打开inputstream。这就是为什么它在hasNextLine的情况下根本不工作,而nextLine()即使没有数据也是一个强制读取方法,期望输入但是无法得到它的抛出异常。可能您应该检查System.in指向的位置。

您可以手动将其设置为setIn(Console()),也可以检查console()是否为空。

答案 2 :(得分:0)

似乎您在循环内调用Scanner(System.in),尝试将其置于顶部或任何循环之前。这就是为什么测试有效而工作没有。

Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
y
Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1585)
    at ScannerIssue.main(ScannerIssue.java:11)

...

        while(true){
        System.out.print("Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N \n");
        Scanner fileS = new Scanner(System.in);

        String input = fileS.nextLine();
        input = input.trim();
        input = input.toLowerCase();

//        tableCount ++;
        fileS.close();
        }

上面的代码导致错误 移动扫描仪文件S =新扫描仪(System.in);到方法或类范围的开头。

您可以使用以下内容:

Scanner fileS = new Scanner(System.in); //moved out of the loop
            while (true) {
                System.out
                        .print("Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N \n");
                String input = fileS.nextLine();
                input = input.trim();
                input = input.toLowerCase();
                // tableCount ++;
                if ("n".equalsIgnoreCase(input)) {
                    break;
                }
            }
            fileS.close(); //moved out of the loop
            System.out.println("Good bye!");
        }

重生将是:

Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
Y
Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
A
Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
N
Good bye!

答案 3 :(得分:0)

如果第一次循环使用它,则可能是以下问题。

来自Java DOC:

当扫描仪关闭时,如果源实现了Closeable接口,它将关闭其输入源。

这意味着它会关闭System.in

删除fileS.close();,您的程序应该可以正常工作!