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

Java程序运行报错:InputMismatchException与NullPointerException求助

问题排查与解决方案

1. java.util.InputMismatchException 原因与修复

这个异常的核心是Scanner读取的输入数据类型和代码中指定的接收类型不匹配,或自定义分隔符规则与输入文件格式不兼容:

  • 若手动设置了Scanner分隔符(比如useDelimiter("\\s+")),需确认分隔符规则和input.txt的实际分隔符完全一致:
    比如输入用逗号分隔,但代码设置了空格分隔,Scanner会把整行内容当成单个字符串,调用nextInt()/nextDouble()时必然抛出类型不匹配异常。
    修复:将分隔符调整为和输入匹配的规则,例如输入是逗号+可选空格的格式,就用scanner.useDelimiter(",\\s*")。
  • 检查input.txt内容:是否存在空行、非预期字符(如中文空格、格式错误的换行符),这些都会导致Scanner读取时识别错误。

2. 注释分隔符后出现的 java.lang.NullPointerException 原因与修复

该异常说明代码中调用了null对象的方法或属性,常见相关场景:

  • Scanner初始化失败:比如new Scanner(new File("input.txt"))时文件路径错误/文件不存在,导致Scanner实例为null,后续调用nextXXX()就会触发NPE。
  • Box类对象未初始化:如果用数组存储Box实例(如Box[] boxes = new Box[n]),仅创建数组但未为每个元素实例化Box对象,直接调用boxes[i].setXXX()就会抛出NPE。

修复方案:

  • 增加文件存在性校验,确保Scanner正常初始化:
    File inputFile = new File("input.txt");
    if (!inputFile.exists()) {
        System.err.println("输入文件不存在,请检查路径");
        System.exit(1);
    }
    Scanner scanner = new Scanner(inputFile);
    
  • 确保Box对象完成实例化:
    Box[] boxes = new Box[5];
    for (int i = 0; i < boxes.length; i++) {
        boxes[i] = new Box(); // 必须先创建实例,再调用方法
    }
    

3. 通用排查步骤

  1. 打印input.txt的完整内容,确认每行格式、分隔符与代码预期完全匹配。
  2. 在Scanner读取前,打印当前分隔符规则(System.out.println(scanner.delimiter())),验证是否符合输入格式。
  3. 先通过nextLine()逐行读取输入并打印,确认拆分后的字段数量、类型是否符合预期。
  4. 检查所有对象的初始化逻辑,避免在null对象上调用方法。

示例修复后的Runner类片段:

public class Runner {
    public static void main(String[] args) {
        File inputFile = new File("input.txt");
        if (!inputFile.exists()) {
            System.err.println("input.txt 不存在,请检查路径");
            return;
        }
        try (Scanner scanner = new Scanner(inputFile)) {
            // 适配空格、换行作为分隔符
            scanner.useDelimiter("\\s+|\\r?\\n");
            int boxCount = scanner.nextInt();
            Box[] boxes = new Box[boxCount];
            
            for (int i = 0; i < boxCount; i++) {
                boxes[i] = new Box();
                boxes[i].setLength(scanner.nextDouble());
                boxes[i].setWidth(scanner.nextDouble());
                boxes[i].setHeight(scanner.nextDouble());
            }
            // 后续业务逻辑
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (InputMismatchException e) {
            System.err.println("输入格式错误,请检查input.txt的数据类型");
            e.printStackTrace();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:55:29