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

Java读取CSV字符串数组提取整数求和输出结果为0的问题求解

问题根因

你代码的核心问题出在逻辑顺序和异常块的使用上:

  1. 输出语句写在了NumberFormatException的捕获块中:每行拆分后的第一个元素是玩家姓名,调用Integer.parseInt()必然触发类型转换异常,程序会直接进入catch块输出结果,此时还没有累加任何分数,sum永远是0
  2. 求和与输出的顺序颠倒:应该先遍历所有分数字段完成求和后,再执行输出操作,而不是在遍历过程中碰到异常就输出
  3. 求和逻辑没有跳过第一个姓名字段,属于冗余逻辑

修正后代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:36:04