起因:
在刷算法题的时候经常需要输入数据、这里就会用到 Scanner、看题解的时候就会发现、调用sc.nextInt()后就会空调用一次sc.nextLine()、才使用sc.nextLine()读取输入的字符串;
举例
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
double y = sc.nextDouble();
sc.nextLine(); /*to flush the character \n left by method nextDouble()*/
String s = sc.nextLine();
System.out.println("String: " + s);
System.out.println("Double: " + y);
System.out.println("Int: " + x);
原因
这是由于nextLine()会读取\n之前的所有内容,并去除\n、而nextDouble()等曾不会去除它后面的\n。
具体工作流程
如果一次输入一个整数、浮点数和字符串
42
3.1415
Hello World!
用户的输入在计算机缓冲区中是这样存储的:42\n3.1415\nHello World!\n
使用nextInt()读取42结束、剩下\n3.1415\nHello World!
使用nextDouble()读取3.1415、剩下\nHello World!
如果此时直接用nextLine()读取、该函数遇到换行符\n就结束而丢掉Hello World!
所以需要在这之前输入nextLine()、去掉缓冲区的\n、然后再读取才是Hello World!