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
相关产品推荐
相关产品推荐

