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

为什么Java中Scanner.nextLine()调用有时会出现跳行、不等待输入的问题?

问题根因

你贴出的这段代码独立运行时逻辑是正常的,出现你描述的现象,核心原因是这段代码运行之前,你已经通过同一个Scanner对象调用过nextInt()、nextDouble()这类非nextLine()的输入方法:
这类方法只会读取输入中对应类型的有效内容,不会消耗输入末尾的换行符\n,残留的换行符会被你循环里的第一次nextLine()直接读取,返回空字符串。此时空字符串不匹配"Yes"/"No"的终止条件,循环会立刻执行第二次,就出现了问题重复打印、首次不等待输入的现象。
你后续新增第二个nextLine()的修改逻辑是完全错误的,相当于每次循环要求用户输入两次内容,自然会出现多次等待输入的问题。

解决方案

  1. 先处理残留换行符:在进入当前的while循环之前,额外调用一次input.nextLine()吃掉之前残留的换行符即可。
  2. 修正判断逻辑不匹配的问题:你当前提示用户输入y/n,但判断条件是匹配"Yes"/"No",用户输入y/n永远无法终止循环,建议统一判断规则,同时增加大小写兼容。

修正后的代码示例

Scanner input = new Scanner(System.in);

// 假设你前面有类似这样的代码,留下了换行符
// int num = input.nextInt();
// 在这里加一行吃掉残留换行
// input.nextLine();

String answer = "";
while (!answer.equalsIgnoreCase("y") && !answer.equalsIgnoreCase("n")){
    System.out.println("abc1");
    System.out.println("Do you want to quit the game? Answers: y/n");
    System.out.println("abc2");
    System.out.println("abc3");
    answer = input.nextLine();
    System.out.println("abc4");
}
// 后续根据answer是y还是n走对应逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:07