如何获取文件中组织成列的测试分数的平均值?

How to get average of test scores organized into columns in a file?

提问人:Nico 提问时间:8/27/2020 更新时间:8/27/2020 访问量:121

问:

该文件包含以下格式的数据:

Name|Test1|Test2|Test3|Test4|Test5|Test6|Test7|Test8|Test9|Test10   
John Smith|82|89|90|78|89|96|75|88|90|96
Jane Doe|90|92|93|90|89|84|97|91|87|91
Joseph Cruz|68|74|78|81|79|86|80|81|82|87
Suzanne Nguyen|79|83|85|89|81|79|86|92|87|88

我正在尝试找出如何获取每列的总和(例如,测试 1 = 82 + 92 + 68 + ...)以最终计算每个测试的平均分数。

这就是我解析文件并进行其他计算的方式:

public class TestAverages
{
  private static int[] grades;
  private static int[] testTotal;
  private static int N;
  private static double classTotal;
  
  public static void main(String[] args) throws FileNotFoundException
  {
    File input = new File("TestData.txt");
    Scanner in = new Scanner(input);
    parseFile(in);
    
  }
  public static void parseFile(Scanner in) throws FileNotFoundException
  {
    TestAverages t = new TestAverages();
    in.nextLine(); //skips the first line of text in file (labels)
    double classAvg =0.0;
    
    while(in.hasNextLine())
    {
      String line = in.nextLine();
      String[] data = line.split("\\|");
      String name = data[0];
      
      grades = new int[data.length - 1];
      N = grades.length;
      for(int i = 0; i < N; i++)
      {
        grades[i] = Integer.parseInt(data[i + 1]);

      }
      
      System.out.println(name);
      System.out.println("Student Average: " + t.getStudentAvg(grades) + "%\n");
      classAvg = t.getClassAvg(grades);
     
      System.out.println("Test Average: " + t.getTestAvg(grades) + "%\n");
    }
    System.out.printf("\nClass Average: %.2f%%\n", classAvg );
  }
  
  
  public double getStudentAvg(int[] grades)
  {
    double total = 0.0;
    double avg = 0.0;
    int N = grades.length;
    
    for(int i = 0; i < N; i++){
      total += grades[i];}
    
    avg = total / N;
    
    return avg;
  }
  
  
  public double getClassAvg(int[] grades)
  {
    double classTotal = getStudentAvg(grades) / N;
    double classAvg =0.0;
    
    classTotal += classTotal;
    classAvg = classTotal;
    
    return classTotal;
  }
}

如果不符合标准,请原谅我的格式。

我目前的主要问题是如何提取每个学生每次测试的分数并将所有内容相加。

Java 数组 文件 解析 java.util.scanner

评论

0赞 8/27/2020
和 和有什么不一样?Student AverageTest Average
0赞 rzwitserloot 8/27/2020
你正在做你已经有疑问的两件事:你已经为每个学生提取了每个分数,你已经把所有东西加起来,并显示平均值。目前尚不清楚您需要回答什么问题。
0赞 Nico 8/27/2020
@saka1029 学生平均分是学生获得的所有分数的平均值(行均值)。检验平均值是列平均值。

答:

0赞 BankBlank 8/27/2020 #1

如果你已经知道文件中总共有10个测试,应该很容易。

你可以让 ,依此类推......int[] testTotal = new int[10];testTotal[0] = sum-of-first-columntestTotal[1] = sum-of-second-column

您可以读取每一行并用正则表达式拆分它们"\\|"

当你在线路中循环时,让 , . . . 因为是学生的名字。testTotal[0] += data[1]testTotal[1] += data[2]testTotal[9] += data[10]data[0]

0赞 WJS 8/27/2020 #2

正在计算每个学生的考试成绩。您需要的是班级平均值和测试平均值。

  • 测试平均值是每次测试的平均分数。
  • 学生平均分是每个学生的平均考试成绩
  • 班级平均值是整个班级在所有测试中的表现。

考虑三个测试

            test1   test2  test3   student average
student1      90      80     70          240/3
student2     100      90     90          280/3
student3      80      80     90          250/3

testAvg      270/3    250/3  250/3

class avg = (270 + 250 + 250)/9   or     (240+280+250)/9      

因此,您需要以这种方式读取值,以便于进行其他计算。我建议将字符串是学生姓名,列表是每个学生的考试成绩的数据。或者你可以使用数组。但是您需要保存分数,以便可以对测试分数进行列平均值。大部分工作已经完成。Map<String,List<Integer>>2D int

另外,我注意到两个问题。调用方法但不声明它,声明方法但从不调用它。getTestAvggetClassAvg