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

Java使用Scanner接收1个或2个输入的实现问题咨询

问题根因

Scanner.hasNext() 为阻塞方法,当绑定控制台输入流System.in时,只有收到输入结束信号(Windows下为Ctrl+Z,Linux/macOS下为Ctrl+D)才会返回false,用户输入单个数字后按回车不属于输入结束信号,因此方法会持续挂起等待后续输入,不会触发单数字处理逻辑。

修复方案

推荐先读取用户输入的整行内容(用户按下回车即代表本次输入结束),再拆分解析数字,修改后代码如下:

private static void promptRequest() {
    System.out.print("Enter a request: ");
    Scanner sc = new Scanner(System.in);
    // 读取完整一行输入,按下回车直接结束本次输入采集
    String inputLine = sc.nextLine();
    // 按任意空白符拆分输入内容
    String[] inputParts = inputLine.trim().split("\\s+");
    long firstNumber, secondNumber;

    // 校验第一个输入数字
    try {
        firstNumber = Long.parseLong(inputParts[0]);
    } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
        System.out.println("First number is not a valid number");
        promptRequest();
        return;
    }

    // 判断是否存在第二个输入
    if (inputParts.length >= 2) {
        try {
            secondNumber = Long.parseLong(inputParts[1]);
        } catch (NumberFormatException e) {
            System.out.println("Second number is not a valid number");
            promptRequest();
            return;
        }
        processTwoNumbers(firstNumber, secondNumber);
    } else {
        processOneNumber(firstNumber);
    }
}

补充说明

原代码中使用递归调用promptRequest()处理输入错误的逻辑,在用户连续多次输入错误时存在栈溢出风险,可替换为while循环实现重试逻辑,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:57:04