gpt4 book ai didi

Java读取学生记录并计算每次测验的高低和平均值

转载 作者:行者123 更新时间:2023-12-01 11:17:14 26 4
gpt4 key购买 nike

更新:非常感谢您的所有意见!我发现我的low返回全0是因为java初始化所有整数0所以我将其更改为int lowScore [] = new int [] {100, 100, 100, 100, 100}。 findAvg 的问题是,在 main 中我创建了一个学生数组 [40],但该文件仅包含 15 个学生,这就是为什么我不能使用 a.length 来查找平均值。我添加了代码来计算行数。

我正在做一项作业,内容是读取学生 ID 的 txt 文件及其 5 个测验分数。该作业要求读取最多 40 名学生的分数,并计算每个测验的最高分、最低分和平均分。

示例输出:

梭哈测验1 测验2 测验3 测验4 测验5

1234 90 100 90 98 80

1243 92 92 90 98 70

高分:92 100 90 98 80

低分:90 92 90 98 70

平均分:91 96 90 98 75

我创建了4个类:用于ID和分数的学生类,用于计算高、低和平均值的统计类,用于读取文件功能的util类,以及主要的驱动程序类。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

class Student {
private int SID;
private int scores[] = new int[5];

public int getSID() {
return SID;
}

public void setSID(int sID) {
SID = sID;
}

public int getScores(int index) {
return scores[index];
}

public void setScores(int[] scores) {
this.scores = scores;
}

public void printSID() {
System.out.println(SID);
}

public void printScores() {
for (int x : scores) {
System.out.println(x);
}
}
}

class Statistics {

private final int[] lowscores = new int[5];
private final int[] highscores = new int[5];
private final float[] avgscores = new float[5];

public void findlow(Student[] a) {
for (Student stu : a) {
for (int i = 0; i < 5; i++) {
lowscores[i] = Math.min(lowscores[i], stu.getScores(i));
}
}
}

public void findhigh(Student[] a) {
for (Student stu : a) {
for (int i = 0; i < 5; i++) {
highscores[i] = Math.max(highscores[i], stu.getScores(i));
}
}
}

public void findavg(Student[] a) {
int[] sum = new int[5];
for (Student stu : a) {
for (int i = 0; i < 5; i++) {
sum[i] += stu.getScores(i);
avgscores[i] = sum[i] / a.length;
}
}
}

public void printLow() {
for (int x : lowscores) {
System.out.println("Low Score " + x);
}
}

public void printHigh() {
for (int x : highscores) {
System.out.println("High Score " + x);
}
}

public void printAvg() {
for (float x : avgscores) {
System.out.println("Average " + x);
}
}
}

class Util {

static Student[] readFile(String filename, Student[] stu) {
try {
FileReader file = new FileReader(filename);
BufferedReader buff = new BufferedReader(file);
int count = 0;

boolean eof = false;
while (!eof) {
String line = buff.readLine();
if (line == null)
break;
else {
System.out.println(line);

if (count > 0) {
StringTokenizer st = new StringTokenizer(line);
for (int i = 0; i < stu.length; i++) {
stu[i] = new Student();
}
stu[count - 1].setSID(Integer.parseInt(st.nextToken()));
int scores[] = new int[5];
int scoreCount = 0;
while (st.hasMoreTokens()) {
scores[scoreCount] = Integer.parseInt(st.nextToken());
scoreCount++;
stu[count - 1].setScores(scores);
}
}
}
count++;
}
buff.close();
} catch (IOException e) {
System.out.println("Error -- " + e.toString());
}
return stu;
}
}

public class Driver{

public static void main(String[] args) {
Student lab4[] = new Student[40];
lab4 = Util.readFile("C:\\lab4.txt", lab4);
Statistics statlab4 = new Statistics();
statlab4.findlow(lab4);
statlab4.findhigh(lab4);
statlab4.findavg(lab4);
statlab4.printLow();
statlab4.printHigh();
statlab4.printAvg();
}
}

程序读取输入文件 lab4.txt,其中包括 1 行标题和 15 行学生记录。程序运行,但无法正确计算高低值和平均值。我知道我对平均值的计算可能是错误的;但我不知道为什么高和低不起作用。

请帮助我。谢谢你!

最佳答案

对于查找平均值,您不应在每次迭代时除以 a.length

public void findavg(Student []a) {
int []sum = new int [5];
for(Student stu: a) {
for(int i=0; i<5; i++) {
sum[i] += stu.getScores(i);
}
}
for(int i=0; i<5; i++) {
avgscores[i] = sum[i] / a.length;
}
}

最小值和最大值看起来不错。

关于Java读取学生记录并计算每次测验的高低和平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31667215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com