提问人:Nico 提问时间:8/27/2020 更新时间:8/27/2020 访问量:121
如何获取文件中组织成列的测试分数的平均值?
How to get average of test scores organized into columns in a file?
问:
该文件包含以下格式的数据:
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;
}
}
如果不符合标准,请原谅我的格式。
我目前的主要问题是如何提取每个学生每次测试的分数并将所有内容相加。
答:
0赞
BankBlank
8/27/2020
#1
如果你已经知道文件中总共有10个测试,应该很容易。
你可以让 ,依此类推......int[] testTotal = new int[10];
testTotal[0] = sum-of-first-column
testTotal[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
另外,我注意到两个问题。调用方法但不声明它,声明方法但从不调用它。getTestAvg
getClassAvg
评论
Student Average
Test Average