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

从scores.csv计算总和与平均值:Java代码无法正常执行问题

嘿,我看你这段计算CSV分数总和和平均分的Java代码出问题了,咱们来一步步排查并修复这些坑:

问题分析与修复方案

1. CSV分隔符没处理对

CSV文件是用**逗号(,)**来分隔数据的,但Java的Scanner默认只会按空格、换行这类空白字符分割内容。所以你的hasNextInt()根本识别不到逗号隔开的分数,循环直接就跳过去了,自然算不出结果。

解决办法:给Scanner设置正确的分隔规则,匹配逗号或者换行符:

fin.useDelimiter(",|\\n");

2. 数据类型不兼容

如果你的分数里有小数(比如85.5),hasNextInt()和nextInt()会直接跳过这些值,导致计算出来的总分和数量都不对。咱们换成hasNextDouble()和nextDouble(),这样整数和小数分数都能处理。

3. 语法错误没写完

你代码里的(t...明显是没写完的,应该是计算平均分的total / count,而且还要注意不能除以0——要是文件为空或者没读到任何数据,直接算平均分就会报错,得加个判断。

4. 文件路径要搞对

确保Scores.csv放在项目的根目录里(和编译后的.class文件同个文件夹),要是文件在别的地方,就得写完整的绝对路径,比如"D:/my-project/Scores.csv"。


修复后的完整代码
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class TotalAndAverage {
    public static void main(String[] args) {
        try {
            // 注意文件路径,相对路径要放在项目根目录
            Scanner fin = new Scanner(new File("Scores.csv"));
            // 设置分隔符:匹配逗号或者换行
            fin.useDelimiter(",|\\n");
            double total = 0;
            int count = 0;

            while (fin.hasNextDouble()) {
                total += fin.nextDouble();
                count++;
            }
            fin.close(); // 用完记得关闭Scanner,释放资源

            // 处理没有读到数据的情况
            if (count == 0) {
                System.out.println("没读取到任何分数数据哦!");
                return;
            }

            System.out.println("Total score is " + total);
            System.out.println("Average score is " + (total / count));

        } catch (FileNotFoundException e) {
            // 给个友好的错误提示,方便排查
            System.out.println("出错啦:找不到Scores.csv文件,请检查路径是否正确!");
            e.printStackTrace();
        }
    }
}

额外小贴士

  • 用完Scanner一定要调用close(),不然会占用资源
  • 如果你的CSV文件第一行是表头(比如写着"Score"),记得先调用fin.nextLine()跳过表头,再开始读分数
  • 可以把文件路径做成参数,这样换文件的时候不用改代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:19:36