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

Java读取CSV计算异常:为何我的统计计算结果不正确?

问题排查与修复方案

嘿,我一眼就揪出你代码里的核心问题啦!问题完全出在求和逻辑的细节错误上,咱们一步步拆解:

1. 最关键的错误:求和时引用了固定索引的数组元素

看你循环里的这段代码:

sumYear += year[0];
sumMonth += month[1];
sumTmax += tmax[2];
sumTmin += tmin[3];
sumAF+= af[4];
sumRain += rain[5];
sumSun+= sun[6];

你每次循环都在累加数组里固定位置的元素(比如year[0]永远是第一行的年份值),而不是当前行刚存入的新数据!这就导致你的总和其实是把某几行的固定字段重复加了几百次,完全不是所有行的统计总和。

2. 修复方案:累加当前行的对应数值

你可以先把当前行的每个字段解析成临时变量,再同时完成数组存储和求和操作,这样既直观又不会出错:

修正后的核心循环代码

while((line = file.readLine()) != null) {
    System.out.println(line);
    String[] splits = line.split(",");
    
    // 先解析当前行的所有数值到临时变量
    double currentYear = Double.parseDouble(splits[0]);
    double currentMonth = Double.parseDouble(splits[1]);
    double currentTmax = Double.parseDouble(splits[2]);
    double currentTmin = Double.parseDouble(splits[3]);
    double currentAF = Double.parseDouble(splits[4]);
    double currentRain = Double.parseDouble(splits[5]);
    double currentSun = Double.parseDouble(splits[6]);
    
    // 存入数组(如果后续业务需要使用数组数据的话)
    year[index] = currentYear;
    month[index] = currentMonth;
    tmax[index] = currentTmax;
    tmin[index] = currentTmin;
    af[index] = currentAF;
    rain[index] = currentRain;
    sun[index] = currentSun;
    
    // 累加当前行的数值到总和变量
    sumYear += currentYear;
    sumMonth += currentMonth;
    sumTmax += currentTmax;
    sumTmin += currentTmin;
    sumAF += currentAF;
    sumRain += currentRain;
    sumSun += currentSun;
    
    counter++;
    index++;
}

3. 额外的细节提醒

  • 如果你的CSV文件第一行是表头(比如"year,month,tmax..."),记得在循环前先调用一次file.readLine()跳过表头,不然会把字符串转成Double抛出异常。
  • 你定义的数组大小是固定的804,如果CSV实际行数超过这个数,会触发数组越界异常。如果不确定行数,建议用ArrayList<Double>来动态存储数据更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:16:23