You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何连续调用Scanner的hasNext()仅能输入一次,添加next()后可输入两次?

为什么添加sc.next()后需要两次输入?

嘿,这个问题的核心在于Scanner类的缓冲区读取逻辑,我给你一步步掰明白:

首先得搞清楚两个方法的本质区别:

  • sc.hasNext():只是检查Scanner的输入缓冲区里有没有可读取的内容,它不会把内容从缓冲区里拿走——就像你看一眼冰箱里有没有饮料,看完饮料还在冰箱里。
  • sc.next():会读取并消费缓冲区里的内容——相当于你把冰箱里的饮料拿出来喝掉,冰箱里就没这个饮料了。

第一种代码场景(没有sc.next())

执行流程是这样的:

  1. 你输入1,这个值被存入Scanner的输入缓冲区;
  2. 第一次调用sc.hasNext():检测到缓冲区里有1,返回true,但1还留在缓冲区里;
  3. 第二次调用sc.hasNext():再次检测缓冲区,1还在那儿,所以还是返回true——根本不需要再输入,因为缓冲区里的内容没被拿走。

第二种代码场景(添加了sc.next())

执行流程就变了:

  1. 你输入1,存入缓冲区;
  2. 第一次sc.hasNext():检测到有内容,返回true,1仍在缓冲区;
  3. 调用sc.next():把缓冲区里的1读取出来,输出str -> 1,这时候缓冲区被清空了;
  4. 第二次调用sc.hasNext():发现缓冲区空了,Scanner就会暂停程序,等待你再次输入内容——所以你得再输一次1,新的1进入缓冲区后,hasNext()才会返回true。

简单总结:hasNext()只“看”不“拿”,next()既“拿”又“消”,这就是为什么加了next()之后需要两次输入的原因~

内容的提问来源于stack exchange,提问作者Garmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:57:26