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

为什么Java中调用Scanner.nextInt后后续nextLine语句未执行

问题根因

该问题是Java Scanner 类输入缓冲区的残留换行符导致的:

  • nextInt()、nextLong()这类非整行读取的方法,仅会读取输入中的数值内容,不会处理用户输入完成后按下回车键产生的换行符 \n,该字符会残留在输入缓冲区中
  • 紧随其后调用的 nextLine() 方法会从缓冲区当前位置开始读取,直到遇到换行符为止,遇到残留的换行符时会直接返回空字符串,因此看起来账户类型的输入步骤被直接跳过,没有等待用户输入。
修复方案

方案1:清理残留换行符

每次调用完nextInt()等非整行读取方法后,额外调用一次sc.nextLine()主动吃掉缓冲区残留的换行符,修改后代码如下:

public static void initialval()
{
    Scanner sc = new Scanner(System.in);
    
    System.out.println("Enter your:");
    
    System.out.println("i) Name ");
    String name = sc.nextLine();
    
    System.out.println("ii) Account number");
    long accno = sc.nextInt();
    sc.nextLine(); // 清除nextInt残留的换行符
    System.out.println("iii) Type of account");
    String typeofacc = sc.nextLine();
    
    System.out.println("iv) Balance");
    int bal = sc.nextInt();
    sc.close();
}

方案2:统一读取逻辑

所有输入统一使用nextLine()整行读取,再自行转换为对应数据类型,避免不同读取方法混用导致的缓冲区兼容问题,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:27:01