Java读取CSV字符串数组提取整数求和输出结果为0的问题求解
问题根因
你代码的核心问题出在逻辑顺序和异常块的使用上:
- 输出语句写在了
NumberFormatException的捕获块中:每行拆分后的第一个元素是玩家姓名,调用Integer.parseInt()必然触发类型转换异常,程序会直接进入catch块输出结果,此时还没有累加任何分数,sum永远是0 - 求和与输出的顺序颠倒:应该先遍历所有分数字段完成求和后,再执行输出操作,而不是在遍历过程中碰到异常就输出
- 求和逻辑没有跳过第一个姓名字段,属于冗余逻辑
修正后代码
public static void main(String[] args) throws IOException{ File gameScores = new File("C:\\Users\\jaret\\OneDrive\\Desktop\\GameScores.csv"); if (gameScores.exists()) { BufferedReader br = null; String line = ""; String csvSplitBy = ","; br = new BufferedReader(new FileReader(gameScores)); System.out.println("----------------------------------------------------------"); System.out.println("-------------------------------------"); System.out.println("Games Report"); System.out.println("----------------------------------------------------------"); System.out.println("-------------------------------------"); System.out.println("Gamer 1 2 3 4 5 6 7"); System.out.println(" 8 9 10 Total"); System.out.println("----------------------------------------------------------"); System.out.println("-------------------------------------"); while ((line = br.readLine()) != null) { String[] list = line.split(csvSplitBy); int sum = 0; // 跳过第一个姓名字段,从下标1开始遍历分数累加 for (int i = 1; i < list.length; i++) { try { Integer num = Integer.parseInt(list[i]); sum += num; } catch (NumberFormatException nfe) { // 转换失败的分数按0处理,或者自行加日志排查 nfe.printStackTrace(); } } // 所有分数累加完成后再输出 System.out.println(list[0] + "\t" + list[1] + "\t" + list[2] + "\t" + list[3] + "\t" + list[4] + "\t" + list[5] + "\t" + list[6] + "\t" + list[7] + "\n\t" + list[8] + "\t" + list[9] + "\t" + list[10] + "\t" + sum); } System.out.println("----------------------------------------------------------"); System.out.println("----------------------------------------------------------"); br.close(); } }
其他可优化点
- 原代码中
(list[x].length() > 10 ? "\t" : "\t")逻辑完全无效,两个分支输出内容一致,可直接删除冗余判断 - 不需要提前初始化
String list[] = new String[10];,直接用split返回的数组即可 - 建议使用try-with-resources语法自动关闭BufferedReader,避免资源泄漏
内容的提问来源于stack exchange,提问作者Jaret Daly
相关产品推荐
相关产品推荐

