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

使用Scanner时nextLine()抛出InputMismatchException而next()无异常的原因

问题:Scanner使用nextLine()获取coach时抛出InputMismatchException的原因

在以下Java代码中,输入coach值并按下回车后,Scanner会抛出InputMismatchException,但改用sc.next()获取coach则不会出现该异常。原本预期两种方式都不会抛出异常,现明确原因如下:

void accept() {
        System.out.println("Enter name , mobile number and coach for the customer and also the amount of ticket.");
        name=sc.nextLine();
        mobno= sc.nextLong();
        coach=sc.nextLine();
        amt=sc.nextInt();
    }

原因解析

  • nextLong()、nextInt()这类针对基本数据类型的Scanner方法,只会读取对应类型的有效内容,不会读取输入末尾的换行符,这个换行符会残留在输入缓冲区中。
  • 具体执行流程:
    1. 执行name=sc.nextLine();时,会读取用户输入的姓名及末尾的回车,同时清空缓冲区里的换行符。
    2. 执行mobno=sc.nextLong();时,用户输入手机号后按回车,该方法只读取数字部分,把末尾的换行符留在了缓冲区。
    3. 执行coach=sc.nextLine();时,该方法会直接读取缓冲区中残留的换行符,相当于获取了一个空字符串,此时用户实际输入的coach值还在缓冲区里。
    4. 后续执行amt=sc.nextInt();时,该方法尝试把缓冲区里的coach字符串(比如"A"、"B"这类非数字内容)转换成整数,因此抛出InputMismatchException。
  • 改用sc.next()时,next()方法会自动跳过开头的空白(包括残留的换行符),然后读取到下一个空白(用户输入coach后按的回车)之前的内容,能正确获取coach值,后续nextInt()也能正常读取金额数字,不会触发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:27:35