为什么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
相关产品推荐
相关产品推荐

