Java中nextInt()之后的nextLine()读取不到键盘输入的情况

今天在刷题过程中遇到一个奇怪的问题。

Scanner in = new Scanner(System.in);
int count= in.nextInt();
String pile = in.nextLine();
String[] piles = pile.split(" ");

因为需要接收传入的两个参数,第一个为int类型,所以调用nextInt()方法。

第二个参数为带空格的字符串,调用next()方法无法读取到空格之后的内容,遂调用nextLine()方法,但是奇怪的事情也发生了。

当输入第一个参数后,还未等输入第二个参数,程序就报异常退出。数字格式错误,要转换的字符串为空串,显然pile没有接收到参数,然而确实也没等输入参数程序就已经报错退出。但是程序没有语法错误,编译也能通过。

用百度搜索相关问题 ,找到了错误的原因:

当用nextInt()读取缓冲区数据时,遇到回车或者空格,数据就会被读取走,但是回车符或者空格会被留下。当再调用nextLine()时,因为nextLine()是以回车符结束,当被调用后,刚好缓冲区还有被nextInt()“吃”剩下的回车符,所以还没等接着输入第二个参数,nextLine()就已经结束。因为只读取到一个回车符,所以pile的参数自然为空,从而导致后序程序出现异常。

解决方案:

把nextInt()换成nextLine(),再转换成int类型,就完美解决。

String s1 = in.nextLine();
int count = Integer.parseInt(s1);
String pile = in.nextLine();
String[] piles = pile.split(" ");

猜你喜欢

转载自blog.csdn.net/u010960184/article/details/82054790
今日推荐