java计算每个同学的平均成绩,每个学科的平均成绩,分为Student类其中包括name,sid,math,chinese,english,avg',还有average类,entrance类
时间: 2024-09-14 15:13:04 浏览: 27
在Java中,我们可以设计这样的结构来计算每个同学的平均成绩、每个学科的平均成绩以及涉及到的类:
首先,我们创建一个名为`Student`的类,它将包含学生的个人信息和成绩属性:
```java
public class Student {
private String name;
private int sid; // 学生ID
private double math;
private double chinese;
private double english;
// 构造函数
public Student(String name, int sid, double mathScore, double chinesScore, double englishScore) {
this.name = name;
this.sid = sid;
this.math = mathScore;
this.chinese = chinesScore;
this.english = englishScore;
}
// 计算平均成绩并设置到avg属性
public void calculateAverage() {
double avg = (math + chinese + english) / 3.0;
setAvg(avg);
}
// getter和setter方法
public String getName() { return name; }
public int getSid() { return sid; }
public double getMath() { return math; }
public double getChinese() { return chinese; }
public double getEnglish() { return english; }
public double getAvg() { return avg; } // 假设avg是一个double类型的成员变量
private void setAvg(double avg) { this.avg = avg; }
}
```
接下来,我们需要一个`Average`类来计算学科的平均成绩,这个类可能会有一个静态方法或者数据结构存储所有学生的成绩信息:
```java
public class Average {
private static Map<String, Double> subjectAverages = new HashMap<>(); // 用于存储每个学科的平均分
// 添加一个新的学生到统计
public static void addStudent(Student student) {
// 更新对应学科的平均值
updateSubjectAverage("数学", student.getMath());
updateSubjectAverage("语文", student.getChinese());
updateSubjectAverage("英语", student.getEnglish());
// 更新学生个人平均值
student.calculateAverage();
}
// 更新学科平均值
private static void updateSubjectAverage(String subject, double score) {
if (!subjectAverages.containsKey(subject)) {
subjectAverages.put(subject, score);
} else {
double currentAvg = subjectAverages.get(subject);
subjectAverages.put(subject, (currentAvg * count(subjectAverages, subject) + score) / (count(subjectAverages, subject) + 1));
}
}
// 计算某个学科已有多少学生
private static int count(Map<String, Double> map, String key) {
return map.containsKey(key) ? map.get(key).toString().length() : 0;
}
// 获取学科平均成绩
public static double getSubjectAverage(String subject) {
return subjectAverages.getOrDefault(subject, 0.0); // 如果科目不存在,返回默认值0.0
}
}
```
最后,`Entrance`类如果代表入学统计或者管理类,可能会有操作整个学生列表的功能:
```java
public class Entrance {
public static void main(String[] args) {
List<Student> students = ...; // 初始化学生列表
for (Student student : students) {
Average.addStudent(student);
System.out.println("学生 " + student.getName() + " 的平均成绩: " + student.getAvg());
}
// 获取各学科平均成绩
for (Map.Entry<String, Double> entry : Average.subjectAverages.entrySet()) {
System.out.println("学科 '" + entry.getKey() + "' 的平均成绩: " + entry.getValue());
}
}
}
```