代码
import java.util.*;
class ScoreRecord
{
private String studentId;
private String name;
private String subject;
private int score;
public ScoreRecord(String studentId, String name, String subject, int score) {
this.studentId = studentId;
this.name = name;
this.subject = subject;
this.score = score;
}
public String getStudentId() {
return studentId;
}
public String getName() {
return name;
}
public String getSubject() {
return subject;
}
public int getScore() {
return score;
}
}
public class StudentScoreAnalysis_NoStream
{
public static void main(String[] args) {
String[] scores = {
"S1001,张三,数学,95",
"S1002,李四,数学,76",
"S1003,王五,数学,59",
"S1001,张三,英语,88",
"S1002,李四,英语,90",
"S1003,王五,英语,66",
"S1001,张三,物理,91",
"S1002,李四,物理,54",
"S1003,王五,物理,73",
"S1004,赵六,数学,88",
"S1004,赵六,英语,92",
"S1004,赵六,物理,85"
};
List<
ScoreRecord> recordList = new ArrayList<
>();
for (int i = 0; i < scores.length; i++) {
String[] parts = scores[i].split(",");
recordList.add(new ScoreRecord(parts[0], parts[1], parts[2], Integer.parseInt(parts[3])));
}
System.out.println("-------------------");
Set<
String> studentNames = new TreeSet<
>();
for (ScoreRecord r : recordList) {
studentNames.add(r.getName());
}
System.out.println("列出所有学生姓名 : " + studentNames);
System.out.println("-------------------");
Map<
String, Integer> totalScores = new HashMap<
>();
for (ScoreRecord r : recordList) {
if(totalScores.containsKey(r.getName())){
int currentScore = totalScores.get(r.getName());
currentScore+=r.getScore();
totalScores.put(r.getName(),currentScore);
}
else {
totalScores.put(r.getName(),r.getScore());
}
}
System.out.println("每个学生总分");
for (Map.Entry<
String, Integer> e : totalScores.entrySet()) {
System.out.println(e.getKey()+":"+e.getValue());
}
System.out.println("-------------------");
String topStudent = "";
int maxTotal = Integer.MIN_VALUE;
for (Map.Entry<
String, Integer> e : totalScores.entrySet()) {
if (e.getValue() > maxTotal) {
maxTotal = e.getValue();
topStudent = e.getKey();
}
}
System.out.println("总分最高学生: " + topStudent + " (" + maxTotal + ")");
System.out.println("-------------------");
Map<
String, Integer> sumScores = new HashMap<
>();
Map<
String, Integer> countScores = new HashMap<
>();
for (ScoreRecord r : recordList) {
sumScores.put(r.getName(), sumScores.getOrDefault(r.getName(), 0) + r.getScore());
countScores.put(r.getName(), countScores.getOrDefault(r.getName(), 0) + 1);
}
for (String name : sumScores.keySet()) {
double avg = sumScores.get(name) * 1.0 / countScores.get(name);
System.out.printf("%s: %.2f%n", name, avg);
}
System.out.println("-------------------");
System.out.println("不及格记录:");
for (ScoreRecord r : recordList) {
if (r.getScore() <
60) {
System.out.println(r.getName() + " - " + r.getSubject() + ": " + r.getScore());
}
}
System.out.println("-------------------");
Map<
String, ScoreRecord> subjectTop = new HashMap<
>();
for (ScoreRecord r : recordList) {
if (!subjectTop.containsKey(r.getSubject()) ||
r.getScore() > subjectTop.get(r.getSubject()).getScore()) {
subjectTop.put(r.getSubject(), r);
}
}
System.out.println("每门课程的最高分:");
for (String subject : subjectTop.keySet()) {
ScoreRecord rec = subjectTop.get(subject);
System.out.println(subject + ": " + rec.getName() + " (" + rec.getScore() + ")");
}
System.out.println("-------------------");
System.out.println("每门课程平均分:");
Map<
String, Integer> subjectSum = new HashMap<
>();
Map<
String, Integer> subjectCount = new HashMap<
>();
for (ScoreRecord r : recordList) {
subjectSum.put(r.getSubject(), subjectSum.getOrDefault(r.getSubject(), 0) + r.getScore());
subjectCount.put(r.getSubject(), subjectCount.getOrDefault(r.getSubject(), 0) + 1);
}
for (String subject : subjectSum.keySet()) {
double avg = subjectSum.get(subject) * 1.0 / subjectCount.get(subject);
System.out.printf("%s: %.2f%n", subject, avg);
}
System.out.println("-------------------");
String topSubject = "";
double highestAvg = Double.MIN_VALUE;
for (String subject : subjectSum.keySet()) {
double avg = subjectSum.get(subject) * 1.0 / subjectCount.get(subject);
if (avg > highestAvg) {
highestAvg = avg;
topSubject = subject;
}
}
System.out.println("平均分最高课程: " + topSubject);
System.out.println("-------------------");
System.out.println("成绩明细表:");
Map<
String, List<
ScoreRecord>
> byStudent = new LinkedHashMap<
>();
for (ScoreRecord r : recordList) {
if (!byStudent.containsKey(r.getName())) {
byStudent.put(r.getName(), new ArrayList<
>());
}
byStudent.get(r.getName()).add(r);
}
for (String name : byStudent.keySet()) {
System.out.print(name + ": ");
List<
ScoreRecord> list = byStudent.get(name);
for (ScoreRecord r : list) {
System.out.print(r.getSubject() + "(" + r.getScore() + ") ");
}
System.out.println();
}
}
}
输出
-------------------
列出所有学生姓名 : [张三, 李四, 王五, 赵六]
-------------------
每个学生总分
李四:220
张三:274
王五:198
赵六:265
-------------------
总分最高学生: 张三 (274)
-------------------
李四: 73.33
张三: 91.33
王五: 66.00
赵六: 88.33
-------------------
不及格记录:
王五 - 数学: 59
李四 - 物理: 54
-------------------
每门课程的最高分:
物理: 张三 (91)
数学: 张三 (95)
英语: 赵六 (92)
-------------------
每门课程平均分:
物理: 75.75
数学: 79.50
英语: 84.00
-------------------
平均分最高课程: 英语
-------------------
成绩明细表:
张三: 数学(95) 英语(88) 物理(91)
李四: 数学(76) 英语(90) 物理(54)
王五: 数学(59) 英语(66) 物理(73)
赵六: 数学(88) 英语(92) 物理(85)