酷代码 AI
菜单
服务商

7-14 成绩计算-2-关联类 分数 10 作者 蔡轲 单位 南昌航空大学 创建成绩类,包含: 属性:平时成绩(int)、期末成绩(int) 方法:计算总成绩(计算规则:平时成绩*0.4+期末成绩*0.6,保留整数部分,小数部分直接丢弃) 创建学生类,包含: 属性:学号(String)、姓名(String)、语文成绩(成绩类)、数学成绩(成绩类)、物理成绩(成绩类) 方法:计算总分、计算平均分 输入3个学生的信息,将每个学生的信息封装在一个学生对象中。 按输入顺序依次输出3个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。 浮点数保留小数的相关知识可参考:https://blog.csdn.net/huaishuming/article/details/17752365 注意:未用学生类对象封装数据的,本题计0分 输入格式: 依次输入3个学生的每门课成绩,每个学生成绩信息格式: 学号+英文空格+姓名+英文空格+课程名+英文空格+平时成绩+英文空格+期末成绩 注:3个学生的课程顺序可能会不一致 例如: 22201311 张琳 语文

```java import java.util.*; class Chengji { int pingshi; int qimo; public Chengji(int pingshi, int qimo) { this.pingshi = pingshi; this.qimo = qimo; } // 计算总成绩:平时*0.4 + 期末*0.6,保留整数部分(直接舍去小数) public int getZong() { return (int)(pingshi * 0.4 + qimo * 0.6); } } class Xuesheng { String xuehao; String xingming; Chengji yuwen; Chengji shuxue; Chengji wuli; public Xuesheng(String xuehao, String xingming) { this.xuehao = xuehao; this.xingming = xingming; } // 设置对应科目的成绩 public void setChengji(String kecheng, Chengji chengji) { if ("语文".equals(kecheng)) { yuwen = chengji; } else if ("数学".equals(kecheng)) { shuxue = chengji; } else if ("物理".equals(kecheng)) { wuli = chengji; } } // 计算总分 public int getTotalScore() { return yuwen.getZong() + shuxue.getZong() + wuli.getZong(); } // 计算平均分,保留两位小数,四舍五入 public double getAverageScore() { return Math.round(getTotalScore() * 100.0 / 3) / 100.0; } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Map<String, Xuesheng> xueshengMap = new LinkedHashMap<>(); // 保持输入顺序 while (sc.hasNextLine()) { String line = sc.nextLine().trim(); if (line.isEmpty()) break; String[] parts = line.split(" "); String xuehao = parts[0]; String xingming = parts[1]; String kecheng = parts[2]; int pingshi = Integer.parseInt(parts[3]); int qimo = Integer.parseInt(parts[4]); // 获取或创建学生对象 Xuesheng xs = xueshengMap.get(xuehao); if (xs == null) { xs = new Xuesheng(xuehao, xingming); xueshengMap.put(xuehao, xs); } // 创建成绩对象并设置到对应科目 Chengji cj = new Chengji(pingshi, qimo); xs.setChengji(kecheng, cj); } // 按输入顺序输出每个学生的总分和平均分 for (Xuesheng xs : xueshengMap.values()) { int total = xs.getTotalScore(); double avg = xs.getAverageScore(); System.out.printf("%s %s %d %.2f%n", xs.xuehao, xs.xingming, total, avg); } } } ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: - 成绩计算时 `(int)(平时*0.4 + 期末*0.6)` 是截断小数而非四舍五入,必须确保类型转换前不进行 `Math.round` 等操作。 - 多行输入中可能存在空行或末尾换行,需使用 `trim()` 和判空处理避免 `split` 出现异常或数组越界。 - 学生信息按学号聚合,但输入顺序可能打乱课程顺序,应使用 `LinkedHashMap` 保证输出顺序与输入一致。 [2025-10-29 16:07:33 | AI写代码神器 | 852点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多