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. 通用排查步骤
- 打印
input.txt的完整内容,确认每行格式、分隔符与代码预期完全匹配。 - 在Scanner读取前,打印当前分隔符规则(
System.out.println(scanner.delimiter())),验证是否符合输入格式。 - 先通过
nextLine()逐行读取输入并打印,确认拆分后的字段数量、类型是否符合预期。 - 检查所有对象的初始化逻辑,避免在
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
相关产品推荐
相关产品推荐

