nextInt()和nextLine()

很多算法题需要自己写输入语句,这个非常简单,有一点要注意的是,在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()的意义在于接收缓冲区的回车。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值