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

输入信息时如何检测空行:Java实现OJ 11057 Exact Sum多组输入

问题修复方案

核心问题原因

  • 输入终止逻辑错误:Scanner.nextLine() 永远不会返回null,输入流耗尽时会直接抛出NoSuchElementException,且你连续调用了两次sc.nextLine(),会额外吞掉一行输入,导致第二组数据读取错位。
  • 测试用例数据未重置:bookPrices是类全局变量,每跑完一组测试用例未清空,下一组数据会累加旧数据导致计算错误。
  • 判题平台输入规则不符:OJ的多组输入一般不会用空行分隔,而是直到输入流结束为止,靠空行判断终止不符合题目的输入约定。

修复后的代码

直接替换原有readEntry方法即可解决多组输入问题:

public void readEntry() {
    StringBuilder answer = new StringBuilder();
    // 用hasNextInt判断是否还有下一组输入,符合OJ通用输入规则
    while (sc.hasNextInt()) {
        // 每轮开始前清空上一轮的书价数据,避免数据污染
        bookPrices.clear();
        n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            bookPrices.add(sc.nextInt());
        }
        Collections.sort(bookPrices);
        m = sc.nextInt();
        answer.append(printMsg()).append("\n");
    }
    System.out.println(answer);
}

注:原有代码中所有多余的sc.nextLine()都可以删除,nextInt()会自动跳过空格、换行符等空白分隔符,不需要手动处理换行。

额外优化建议

  • 现有判断重复的逻辑可以简化,不需要遍历全列表调用Collections.frequency,排序后检查相邻元素是否相等即可判定存在重复,性能更高。
  • 可以用双指针法替代现有二分查找逻辑,时间复杂度更低,不过现有逻辑不影响正确性可以不用调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:54:04