为什么Java中Scanner.nextLine()调用有时会出现跳行、不等待输入的问题?
问题根因
你贴出的这段代码独立运行时逻辑是正常的,出现你描述的现象,核心原因是这段代码运行之前,你已经通过同一个Scanner对象调用过nextInt()、nextDouble()这类非nextLine()的输入方法:
这类方法只会读取输入中对应类型的有效内容,不会消耗输入末尾的换行符\n,残留的换行符会被你循环里的第一次nextLine()直接读取,返回空字符串。此时空字符串不匹配"Yes"/"No"的终止条件,循环会立刻执行第二次,就出现了问题重复打印、首次不等待输入的现象。
你后续新增第二个nextLine()的修改逻辑是完全错误的,相当于每次循环要求用户输入两次内容,自然会出现多次等待输入的问题。
解决方案
- 先处理残留换行符:在进入当前的while循环之前,额外调用一次
input.nextLine()吃掉之前残留的换行符即可。 - 修正判断逻辑不匹配的问题:你当前提示用户输入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
相关产品推荐
相关产品推荐

