Java中使用Integer.parseInt读取文件首行数字报错,如何解决?
问题分析
你遇到的NumberFormatException是因为在循环里每次读取一行就尝试转成整数,但文件只有首行是数字,后续行都是字符串(比如"Basketball"),自然无法转成整数,触发报错。
解决方案
核心思路是:先单独读取并解析首行的数字,再循环处理剩下的运动名称行,修改后的代码如下:
// 先读取首行的数字 int num = 0; if (inFile.hasNextLine()) { String firstLine = inFile.nextLine(); try { num = Integer.parseInt(firstLine); } catch (NumberFormatException e) { // 可选:处理首行不是有效数字的情况 System.err.println("首行不是有效数字:" + firstLine); return; } } // 再循环处理剩下的运动名称行 int i = 0; while (inFile.hasNextLine()) { String line = inFile.nextLine(); if (line.toLowerCase().equals("basketball")) { AllSports.add(new Basketball(i)); } else if (line.toLowerCase().equals("football")) { AllSports.add(new Football(i)); } i++; } // 把调用Score_Med的逻辑移到循环外,避免重复执行(根据你的需求调整) for (Sports obj : AllSports) { obj.Score_Med(); obj.Score_Med(); }
关键修改点
- 把首行的解析逻辑从循环中抽离,只处理第一行
- 增加
try-catch处理首行可能不是数字的异常(可选,但让代码更健壮) - 将
Score_Med()的调用移到循环外,避免每读一行就重复执行(原代码逻辑会导致多次重复调用,可根据实际需求调整)
内容的提问来源于stack exchange,提问作者Nicolas Nino
相关产品推荐
相关产品推荐

