如何解决Java Scanner导致程序重复请求输入的问题
解决Java Scanner重复打印与多次输入问题
问题根源
初始代码的问题出在Scanner缓冲区残留的换行符:如果程序在调用answer()前用过scan.next()、scan.nextInt()等仅读取部分内容的方法,这些方法会把输入末尾的\n换行符留在缓冲区。第一次调用scan.nextLine()时会直接读取这个空行,导致command为空,循环条件!command.contains("Hello World!")成立,于是再次打印Hello!!,出现重复输出的情况。
你后来添加的scan.nextLine()虽然吃掉了残留换行,但每次调用answer()都会多执行一次无意义读取,导致用户必须输入两次才能完成一次命令读取,不符合需求。
正确解决方案
只需要在程序初始化时一次性处理缓冲区可能残留的换行符,后续每次读取仅调用一次scan.nextLine()即可。
修正后的代码(通用版)
import java.util.Scanner; public class ScannerDemo { private static Scanner scan = new Scanner(System.in); private static String command = ""; public static void answer() { System.out.print("\t> "); command = scan.nextLine(); // 仅读取一次整行,支持带空格的输入 } public static void main(String[] args) { // 处理初始化前可能残留的换行符 if (scan.hasNextLine()) { scan.nextLine(); } while (!command.contains("Hello World!")) { System.out.println("Hello!!"); answer(); } System.out.println("输入正确!"); } }
简化版(无前置Scanner操作时使用)
如果程序启动后没有先执行其他Scanner读取操作,可直接调整循环逻辑,避免初始空值问题:
import java.util.Scanner; public class ScannerDemo { private static Scanner scan = new Scanner(System.in); private static String command; public static void answer() { System.out.print("\t> "); command = scan.nextLine(); } public static void main(String[] args) { do { System.out.println("Hello!!"); answer(); } while (!command.contains("Hello World!")); System.out.println("输入正确!"); } }
效果验证
运行修正后的代码,会得到你期望的输出:
Hello!! > fjbejwkb Hello!! > Hello World! 输入正确!
每次输入错误后,程序仅打印一次Hello!!并请求一次输入,同时完全支持带空格的输入内容。
内容的提问来源于stack exchange,提问作者RystaMakesGames
相关产品推荐
相关产品推荐

