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(" ");

 

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值