当前位置: 首页 > news >正文

nextInt() 与 nextLine()不能做同桌

为什么 nextInt() + nextLine() 会出问题,以及底层的原理。

1. 核心原因:回车符(\n)的残留

计算机处理键盘输入时,有一个输入缓冲区(Buffer)

当输入数字 10 并按下回车键时,输入缓冲区里的内容实际上是:

10\n

10 是你输入的数字,\n 是回车键产生的换行符)

2. nextInt() 的行为

nextInt() 方法的作用是读取整数。

  1. 它读取了缓冲区里的 10
  2. 它遇到 \n(非数字字符)时,它认为数字结束了,于是停止读取。
  3. 关键点来了nextInt() 不会消耗 那个 \n。它把 10 取走了,但把 \n 留在了缓冲区里。

此时,缓冲区里剩下了:

\n

3. nextLine() 的行为(出问题的地方)

nextLine() 方法的作用是读取一行文本。它的结束标志就是遇到换行符 \n

  1. 当紧接着调用 nextLine() 时,它去检查缓冲区。
  2. 立刻就看到了刚才 nextInt() 剩下的那个 \n
  3. 它心想:“哦,碰到换行符了,这行结束了。”
  4. 于是它读取了 \n 之前的内容(也就是空的),并且消耗掉了这个 \n
  5. 结果:还没来得及输入字符串,nextLine() 就立刻结束了,并返回了一个空字符串。

4. 为什么 next() 没有这个问题?

如果用的是 next() 而不是 nextLine(),通常不会出问题。

  • next() 的机制:它在读取有效字符之前,会自动跳过/忽略所有的空白字符(空格、Tab、换行符)。
  • 所以,当 next() 看到缓冲区里剩下的 \n 时,它会直接把它扔掉,然后继续等待你输入下一个真正的字符串。

5. 图解流程

假设代码如下:

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
String s = sc.nextLine(); // 这里会出问题

步骤演示:

  1. 用户操作:输入 10,按回车。
    • 缓冲区[ 1, 0, \n ]
  2. nextInt() 执行
    • 读取 1,读取 0
    • 遇到 \n,停止。
    • 返回整数 10
    • 缓冲区剩余[ \n ]
  3. nextLine() 执行
    • 查看缓冲区,第一个字符就是 \n
    • 判定本行结束。
    • 返回空字符串 ""
    • 程序继续往下跑,用户没机会输入字符串。

6. 如何解决?

有两种常用的解决方案:

方案一:多加一句 nextLine() 清除缓存
nextInt() 之后,手动调用一次 nextLine() 把那个残留的回车符“吃掉”。

int i = sc.nextInt();
sc.nextLine(); // 专门用来吃掉那个 \n,不接收返回值
String s = sc.nextLine(); // 这才是真正接收用户输入的

方案二 :统统用 nextLine()
不使用 nextInt(),所有的输入都当作字符串读进来,然后再转换。这样可以避免各种缓冲区残留问题。

int i = Integer.parseInt(sc.nextLine()); // 读一行字符串并转为int
String s = sc.nextLine();

方案三 :避免混用
next()、nextInt()、nextDouble()nextLine()不要混用、交叉使用。

总结

导致该问题的原因是 nextInt() 只读取数字但不消耗结束符(回车),而 nextLine() 以回车为结束标志,导致直接读取了残留的回车符。

http://www.jsqmd.com/news/63576/

相关文章:

  • 2025年靠谱的长沙风管厂家最新TOP排行榜
  • 2025年热门的暗门液压合页TOP品牌厂家排行榜
  • 2025年热门的杀菌消毒衣物烘干机厂家最新TOP排行榜
  • 2025年热门的阻尼静音平面铰链厂家最新推荐权威榜
  • 2025年靠谱的精密减速机优质厂家推荐榜单
  • 家政服务机构排名及优质品牌推荐
  • 2025年口碑好的礼品纸箱包装/纸箱包装设计品牌厂家排行榜
  • 2026 年河北沧州任丘市农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活
  • 2025年质量好的分离设备厂家实力及用户口碑排行榜
  • 2025年口碑好的汽车手板模型厂家最新推荐排行榜
  • 2025年比较好的高精密中空旋转平台/中空旋转平台实力厂家TOP推荐榜
  • 2025办公家具会议桌制造企业TOP5权威推荐:甄选品质品牌
  • 2025年靠谱的抽屉滑轨热门厂家推荐榜单
  • 供暖季技术实战:益和热力用 TDengine 时序数据库破解热力数据处理难题 - 详解
  • 2025年知名的净化铝型材/超薄净化铝型材实力厂家TOP推荐榜
  • 任丘市农村自建房找谁好?河北省沧州市任丘市自建房公司 / 机构深度评测口碑推荐榜
  • 2025年评价高的无缝钢瓶超声波探伤设备厂家选购指南与推荐
  • 2026 年河北沧州河间市农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活
  • selenium: 关闭标签页、跳转到最新的标签页
  • 2025年五大安全继电器企业排行榜,口碑不错的安全继电器专业
  • 2025年北京高性价比办公家具公司推荐:办公家具会议桌公司及
  • ollama渗透模型安装ctf-player_elona
  • 2025年北京办公椅定制厂家推荐及现代化高性价比办公家具企业
  • 2025年质量好的专业通风设备/通风设备静压箱厂家最新推荐排行榜
  • 2025年知名的钢瓶检测设备/低温绝热钢瓶检测设备厂家最新推荐排行榜
  • 2025年聚氨酯砂浆地坪,水性聚氨酯砂浆地坪厂家推荐:防滑系数测试与品质筛选
  • 2025年聚氨酯砂浆地坪,水性聚氨酯砂浆地坪厂家推荐:耐高温性能测评与选购指引
  • 2025年石材清洗防护,石材仿古处理,石材养护服务商最新推荐,古建筑石材保养测评!
  • 2025年五大隔离式安全栅品牌产品排行榜,专业设备推荐与性能
  • FastAPI 基础入门-章节五(Pydantic的使用) - 详解