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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:48:01