使用扫描仪和文件计算 .csv 文件的平均分数 (java)?

Using scanner and file to compute a mean score from a .csv file (java)?

使用扫描仪和文件阅读此文件,该文件包含 1972 年至 2004 年综合社会调查测得的词汇分数。计算并显示男性和女性的平均分数。

我不确定如何用逗号将行分隔成块并仍然保留正确的数据。

文件内容示例: 女,7 男,3 男,6 男,10岁 女,10

public static void main(String[] args) throws FileNotFoundException {
        File file = new File("scores.csv");
        Scanner in = new Scanner(file);

        String run = "";
        int maleCount = 0;
    int femaleCount = 0;
    int maleScore = 0;
    int femaleScore = 0;

    while (in.hasNextLine()) {
        String current = in.nextLine();
        in.useDelimiter(",");
        if (current.contains("f")) {
            femaleCount++;
  //                add score onto femaleScore
        }
        else {
            maleCount++;
 //             add score onto maleScore

        }

    double femaleAverage = femaleScore / femaleCount;
    System.out.println(femaleAverage);
    double maleAverage = maleScore / maleCount;
    System.out.println(maleAverage);

        }

        in.close();
    }

您的计算是在 while 循环内进行的,这意味着它将在文件中每行计算一次此平均值,这是错误的。 下面的代码假定数据格式与您的 post.

中所述相同

Female,7

Male,3

Male,6

Male,10

Female,10

public static void main(String[] args) throws FileNotFoundException {
    File file = new File("scores.csv");
    Scanner in = new Scanner(file);

    String run = "";
    int maleCount = 0;
    int femaleCount = 0;
    int maleScore = 0;
    int femaleScore = 0;

    while (in.hasNextLine()) {
        String current = in.nextLine();
        String[] split = current.split(",");
        if (split[0].toLowerCase().contains("f")) {
            femaleCount++;
            femaleScore += Integer.parseInt(split[1]);
            //                add score onto femaleScore
        } else {
            maleCount++;
            maleScore += Integer.parseInt(split[1]);
            //             add score onto maleScore
        }

    }

    double femaleAverage = femaleScore / femaleCount;
    System.out.println(femaleAverage);
    double maleAverage = maleScore / maleCount;
    System.out.println(maleAverage);

    in.close();
}

如果数据不同,post在这里,我会相应地编辑代码

假设您的输入文件结构如下:

男,4岁

女,7岁

男,3

女,5岁

等等

那么下面的代码应该可以满足您的需求。你非常接近,只需要用逗号分隔行,然后像数组一样评估部分(gender/score)。

String filePath = "C:\Users\adam\Documents\Scores.txt";
File file = new File(filePath);
Scanner scanner = new Scanner(file);

int maleCount = 0;
int femaleCount = 0;
int maleScore= 0;
int femaleScore = 0;

while(scanner.hasNext()){
    String line = scanner.nextLine();
    String[] split = line.split(",");
    String gender = split[0];
    String score = split[1];
    if(gender.toLowerCase().trim().equals("male")){
        maleCount++;
        maleScore += Integer.valueOf(score.trim());
    }else if(gender.toLowerCase().trim().equals("female")){
        femaleCount++;
        femaleScore += Integer.valueOf(score.trim());
    }
}

scanner.close();

double maleAverage = (double) maleScore / maleCount;
double femaleAverage = (double) femaleScore / femaleCount;
System.out.println("Male Average: " + maleAverage);     
System.out.println("Female Average: " + femaleAverage);