【发布时间】:2016-08-29 06:26:36
【问题描述】:
在解决黑客级别的问题时,我面临扫描仪/缓冲读取器无法读取最后一个问题。因为他们提供的输入就像
10
abcdefghijk
2
R 1 2
W 3 4
所以扫描仪/缓冲读取器都无法读取最后一行。如果输入是这样的,那么代码似乎可以正常工作。
10
abcdefghijk
2
R 1 2
W 3 4
(输入结束)
public class ScannerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int len = input.nextInt();
input.nextLine();
String inputString = input.nextLine();
int qc = input.nextInt();
input.nextLine();
System.out.println();
System.out.println(len + inputString + qc);
for(int i=0;i<qc;i++){
String l = input.next();
int le = input.nextInt();
int ri = input.nextInt();
input.nextLine();
System.out.println(l+le+ri);
}
input.close();
}
}
这是我正在使用的示例代码。我知道我们需要一个 \r 或 \n 在行尾从扫描仪/缓冲阅读器读取行。但是任何人都可以为这个问题提供解决方案,因为输入来自预定义的系统。
【问题讨论】:
-
循环的最后一次迭代以
input.nextLine()结束,因此会阻塞直到找到 EOL,或者直到输入流关闭,但没有 EOL,并且 System.in 永远不会关闭. -
我也试过没有 input.nextLine() 但它给出了相同的结果。
标签: java