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

Java中如何避免NZEC错误?输入读取问题求助

SPOJ NZEC错误修复:输入读取问题解决

问题描述

本地Eclipse中运行代码时控制台可正常读取输入,但提交至SPOJ后抛出NZEC错误,具体报错信息如下:

Exception in thread "main" java.lang.NumberFormatException: null
at java.base/java.lang.Long.parseLong(Long.java:662)
at java.base/java.lang.Long.valueOf(Long.java:1151)
at Main.main(Main.java:11)

输入格式要求:第一行是测试用例数,后续每行对应一个输入数值,需输出其下一个最近回文数(示例输入:

2
123
41

示例输出:

131
44

)

错误原因分析

核心问题在于重复创建BufferedReader实例:

  • 代码中每次读取输入时都新建BufferedReader(new InputStreamReader(System.in)),而System.in是全局唯一的输入流,多次创建Reader会导致流读取位置混乱,甚至在后续读取时返回null(当流被提前耗尽时),触发NumberFormatException。
  • 另外,输出时混用System.out.print和System.out.println,可能导致输出格式不符合SPOJ要求,间接引发NZEC错误。

修复方案

  1. 复用单个BufferedReader实例:全程只创建一次BufferedReader,所有输入读取都通过该实例完成,避免流读取冲突。
  2. 统一输出格式:所有结果都用System.out.println输出,保证每行一个结果,符合SPOJ的输出规范。
  3. 增加空行处理:读取输入时跳过空行,避免因输入中的空行导致转换失败。

修复后的完整代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NextPalindrome_SPOJ {

    public static void main(String[] args) throws IOException {
        // 只创建一次BufferedReader,复用读取所有输入
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        // 读取测试用例数,先处理空行
        String tLine;
        while ((tLine = reader.readLine()) != null && tLine.trim().isEmpty());
        int t = Integer.parseInt(tLine.trim());

        while (t-- > 0) {
            // 读取每行输入,跳过空行
            String numLine;
            while ((numLine = reader.readLine()) != null && numLine.trim().isEmpty());
            if (numLine == null) break; // 防止意外的输入结束
            
            long n = Long.parseLong(numLine.trim());
            if (n < 9) {
                System.out.println(n + 1);
            } else {
                while (true) {
                    n++;
                    String numStr = String.valueOf(n);
                    if (numStr.equals(new StringBuilder(numStr).reverse().toString())) {
                        break;
                    }
                }
                System.out.println(n);
            }
        }
        reader.close();
    }
}

关键优化点说明

  • 单个BufferedReader实例确保输入流读取的连续性,不会出现读取到null的情况。
  • 增加空行跳过逻辑,兼容输入中可能存在的空白行,避免转换异常。
  • 统一使用println输出,保证每个结果单独占一行,符合SPOJ的输出格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:25:24