我来帮你解决这个编程问题。我们需要创建两个类:成绩类和学生类,并实现题目要求的功能。 ```java import java.util.*; class Grade { private int usualScore; private int finalScore; public Grade(int usualScore, int finalScore) { this.usualScore = usualScore; this.finalScore = finalScore; } public int getTotalScore() { return (int)(usualScore * 0.4 + finalScore * 0.6); } } class Student { private String id; private String name; private Grade chinese; private Grade math; private Grade physics; public Student(String id, String name) { this.id = id; this.name = name; } public void setGrade(String course, Grade grade) { switch (course) { case "语文": chinese = grade; break; case "数学": math = grade; break; case "物理": physics = grade; break; } } public int getTotalScore() { return chinese.getTotalScore() + math.getTotalScore() + physics.getTotalScore(); } public double getAverageScore() { return Math.round(getTotalScore() * 100.0 / 3) / 100.0; } public String toString() { return id + " " + name + " " + getTotalScore() + " " + String.format("%.2f", getAverageScore()); } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Map<String, Student> students = new LinkedHashMap<>(); for (int i = 0; i < 9; i++) { String[] data = scanner.nextLine().split(" "); String id = data[0]; String name = data[1]; String course = data[2]; int usualScore = Integer.parseInt(data[3]); int finalScore = Integer.parseInt(data[4]); students.putIfAbsent(id, new Student(id, name)); Student student = students.get(id); student.setGrade(course, new Grade(usualScore, finalScore)); } for (Student student : students.values()) { System.out.println(student); } } } ``` 代码说明: 1. Grade类处理单科成绩计算,使用int类型直接截断小数部分 2. Student类管理学生信息和成绩,使用四舍五入保留两位小数 3. Main类处理输入输出,使用LinkedHashMap保持输入顺序 4. 平均分计算时先乘以100再除以100实现四舍五入到两位小数 注意事项: 1. 成绩计算时要注意类型转换,避免精度丢失 2. 使用LinkedHashMap保持学生输入顺序 3. 四舍五入处理要放在最后一步计算 4. 科目设置使用switch-case确保正确对应 [2025-04-18 11:43:55 | AI写代码神器 | 621点数解答]