当前位置: 首页 > 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.gsyq.cn/news/74132.html

相关文章:

  • 2025年靠谱的长沙风管厂家最新TOP排行榜
  • 2025年热门的暗门液压合页TOP品牌厂家排行榜
  • 2025年口碑好的汽车手板模型厂家最新推荐排行榜
  • 2025年靠谱的抽屉滑轨热门厂家推荐榜单
  • 供暖季技术实战:益和热力用 TDengine 时序数据库破解热力数据处理难题 - 详解
  • 2025年知名的净化铝型材/超薄净化铝型材实力厂家TOP推荐榜
  • 2025年评价高的无缝钢瓶超声波探伤设备厂家选购指南与推荐
  • selenium: 关闭标签页、跳转到最新的标签页
  • 2025年质量好的专业通风设备/通风设备静压箱厂家最新推荐排行榜
  • 2025年知名的钢瓶检测设备/低温绝热钢瓶检测设备厂家最新推荐排行榜
  • 2025年聚氨酯砂浆地坪,水性聚氨酯砂浆地坪厂家推荐:耐高温性能测评与选购指引
  • 2025年石材清洗防护,石材仿古处理,石材养护服务商最新推荐,古建筑石材保养测评!
  • 2025年石材维保托管,石材结晶,石材维修病变治理服务商最新推荐,石材病变修复测评!
  • 2025年12月IT培训机构推荐:年度综合实力排行榜TOP5机构深度评测与选择指南
  • 2025年工业自动化安全栅五大品牌排行榜,看哪家品质好
  • 2025年12月成都月嫂培训机构推荐:五强对比评测排行榜单深度解析
  • 2025年热门的新疆储油罐清洗检测用户口碑最好的厂家榜
  • 2025年12月北京婚礼策划公司推荐:专业评测排行榜单及实用选择策略解析
  • 2025年北京办公家具公司口碑排名:科尔卡诺(北京)好不好?
  • 2025年度工业自动化设备公司口碑排名:启栅自动化设备行业口
  • 2025年评价高的管状带式输送机热门厂家推荐榜单
  • 2025年口碑好的电力牵引安全绳/耐磨安全绳厂家最新推荐权威榜
  • 启栅(上海)自动化设备有限公司的核心竞争力是什么?其优势在哪
  • 2025年比较好的明装反弹器厂家推荐及选购指南
  • 2025年比较好的龙门硬度计/里氏硬度计热门厂家推荐榜单
  • 2025年知名的金相检测厂家最新权威推荐排行榜
  • 编程语言基础概念
  • 2025 年石材养护服务商最新推荐榜,聚焦技术实力与市场口碑深度解析的优质品牌排行大理石石材翻新/石材维保托管/石材结晶/石材维修病变治理/石材清洗防护/石材仿古处理公司推荐
  • 2025年评价高的贵金属电刷实力厂家TOP推荐榜
  • 2025年知名的景区轨道观光小火车实力厂家TOP推荐榜