2

我正在尝试获取用户输入,但我不断收到错误消息:未找到行 行号引用“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

4 回答 4

2

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

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

当你这样做

文件S.nextLine();

它将尝试读取,如果没有找到行,它将抛出异常。也找

文件S.close()

在阅读之前在您的代码文件中。如果在读取操作之前关闭它,则不能再次打开它,它会抛出异常。我认为这是最可能的原因,因为我几周前就有了:P

于 2013-09-10T19:04:14.053 回答
1

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

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

于 2013-09-10T18:26:39.613 回答
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();
        }

上面的代码导致错误 Move the Scanner fileS = new Scanner(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!
于 2013-09-10T20:59:01.453 回答
0

如果它在您第一次循环时起作用,则可能是以下问题。

来自 Java 文档:

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

这意味着它关闭了 System.in

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

于 2014-04-09T15:14:25.740 回答