在解决黑客级别的问题时,我遇到的问题是scanner / bufferedreader无法读取最后一个问题。由他们提供的输入就像
10
abcdefghijk
2
R 1 2
W 3 4
因此,两个scanner / bufferedreader都无法读取最后一行。如果输入类似,那么代码似乎工作正常。
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来读取scan / bufferedreader的readline。但是,任何人都可以提供此问题的解决方案,因为输入来自预定义的系统。
答案 0 :(得分:3)
BufferedReader
会读取最后一行,即使它没有以换行符结束。 System.in
是罪魁祸首,它有自己的行缓冲。
本机系统的事情:假设你按了几个退格键来改变最后一个数字...
答案 1 :(得分:1)
问题在于:
input.nextLine();
String inputString = input.nextLine();
你正在消耗一条线来扔掉它。
另一件事是:特别是在处理标准库时 - 不要假设某些东西被破坏/不起作用。在99,999%的情况下,问题出在您的代码中。