Java调用Scanner.nextInt后后续nextLine输入流程被跳过问题咨询
问题原因
你遇到的Y/N输入环节被跳过的问题是JavaScanner类的常见使用误区,核心原因是输入缓冲区残留了换行符:
scan.nextInt()仅会读取输入的整数数值,不会处理用户输入完成后按下回车键产生的换行符,该换行符会一直留在输入缓冲队列中- 后续执行
r = scan.nextLine()时,方法会直接读取到缓冲队列里的换行符,返回空字符串,不会等待用户手动输入,所以看起来就像流程被直接跳过了
修复方案
方案1:手动清除残留换行符
在读取天数的nextInt()调用后,新增一行scan.nextLine()吃掉缓冲里的换行符即可,修改后代码片段如下:
System.out.println("Number of Days you are staying in: "); dys = scan.nextInt(); scan.nextLine(); // 新增行,清除缓冲区残留的换行符 String r; String d = new String ("Y"); String e = new String ("N"); System.out.println("A refrigerator costs $2.50 extra each day would you like that? (Y/N)"); r = scan.nextLine();
方案2:统一使用nextLine读取所有输入
避免混合使用nextInt()和nextLine(),所有输入都用nextLine()读取后再做类型转换,这种方式兼容性更强,不容易出现输入错位问题:
System.out.println("Number of Days you are staying in: "); // 先读字符串再转整数 String dysInput = scan.nextLine(); int dys = Integer.parseInt(dysInput);
其他优化建议
- 你当前代码中定义的
a、b、c、d、e五个变量全程没有被使用,可以删除避免冗余 - N的判断逻辑没有忽略大小写,用户输入小写
n时会匹配失败,建议把r.equals("N")改为r.equalsIgnoreCase("N")
内容的提问来源于stack exchange,提问作者Bernard
相关产品推荐
相关产品推荐

