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

