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

如何解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:42:52