我正在尝试获取用户输入,但我一直收到错误:找不到行 行号引用“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(),它将避免此错误 但 这会一起跳过用户输入。
我在这里缺少什么?
扫描仪处于公共功能
提前致谢!
答案 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();
,您的程序应该可以正常工作!