很多算法题需要自己写输入语句,这个非常简单,有一点要注意的是,在nextInt()方法后面使用nextLine()时,中间要加上一个nextLine(),像这样:
输入为:
5
1 2 3 1 1 1 4 5
输入代码编写如下:
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
sc.nextLine(); //要加上这一条
String strs = sc.nextLine();
我本人也是一直使用这个方法,如果不加中间那行代码,strs就会接收到一个空的字符串。
具体原因是这样的:
Java从控制台输入的数据会先存储在缓冲区里。Scanner是一个扫描器,Scanner对象根据调用的方法在缓冲区扫描数据读进来。注意,回车以及空格也同样会进入缓冲区被识别出来。
比如nextInt(),如果扫描的下一个数据是 int型数字就会被读进来。再看一下我们的输入:
5
1 2 3 1 1 1 4 5
5 作为 int型被读进来,nextInt()执行完毕,轮到nextLine(),缓冲区的下一个字符是回车,当Scanner对象扫描到换行(也就是回车)时,认为一行数据识别完毕,但此时我们的输入缓冲区只有一个回车,所以 str 不会接到任何的数据,nextLine()也执行完毕,所以在我们手动输入的时候,输入一个5,再按下回车就被判定输入结束。
这时
System.out.println(strs.equals(""));
结果是true
所以中间添加一行nextLine()的意义在于接收缓冲区的回车。